mirror of
https://github.com/jojo61/vdr-plugin-softhdcuvid.git
synced 2025-03-01 10:39:28 +00:00
Set Deinterlace Table for vaapi
Clean up exit on softhddrm
This commit is contained in:
parent
e14ea73a00
commit
f27e4fb35f
31
drm.c
31
drm.c
@ -545,6 +545,7 @@ static void drm_swap_buffers() {
|
|||||||
m_need_modeset = 0;
|
m_need_modeset = 0;
|
||||||
has_modeset = 1;
|
has_modeset = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
drmModeSetCrtc(render->fd_drm, render->crtc_id, fb, 0, 0, &render->connector_id, 1, &render->mode);
|
drmModeSetCrtc(render->fd_drm, render->crtc_id, fb, 0, 0, &render->connector_id, 1, &render->mode);
|
||||||
|
|
||||||
if (previous_bo) {
|
if (previous_bo) {
|
||||||
@ -562,15 +563,16 @@ static void drm_clean_up() {
|
|||||||
return;
|
return;
|
||||||
Debug(3, "drm clean up\n");
|
Debug(3, "drm clean up\n");
|
||||||
|
|
||||||
if (previous_bo) {
|
|
||||||
drmModeRmFB(render->fd_drm, previous_fb);
|
|
||||||
gbm_surface_release_buffer(gbm.surface, previous_bo);
|
|
||||||
}
|
|
||||||
|
|
||||||
drmModeSetCrtc(render->fd_drm, render->saved_crtc->crtc_id, render->saved_crtc->buffer_id, render->saved_crtc->x,
|
drmModeSetCrtc(render->fd_drm, render->saved_crtc->crtc_id, render->saved_crtc->buffer_id, render->saved_crtc->x,
|
||||||
render->saved_crtc->y, &render->connector_id, 1, &render->saved_crtc->mode);
|
render->saved_crtc->y, &render->connector_id, 1, &render->saved_crtc->mode);
|
||||||
drmModeFreeCrtc(render->saved_crtc);
|
drmModeFreeCrtc(render->saved_crtc);
|
||||||
|
|
||||||
|
if (previous_bo) {
|
||||||
|
drmModeRmFB(render->fd_drm, previous_fb);
|
||||||
|
gbm_surface_release_buffer(gbm.surface, previous_bo);
|
||||||
|
}
|
||||||
|
|
||||||
if (has_modeset) {
|
if (has_modeset) {
|
||||||
drmModeAtomicReqPtr ModeReq;
|
drmModeAtomicReqPtr ModeReq;
|
||||||
const uint32_t flags = DRM_MODE_ATOMIC_ALLOW_MODESET;
|
const uint32_t flags = DRM_MODE_ATOMIC_ALLOW_MODESET;
|
||||||
@ -613,22 +615,29 @@ static void drm_clean_up() {
|
|||||||
if (render->hdr_blob_id)
|
if (render->hdr_blob_id)
|
||||||
drmModeDestroyPropertyBlob(render->fd_drm, render->hdr_blob_id);
|
drmModeDestroyPropertyBlob(render->fd_drm, render->hdr_blob_id);
|
||||||
render->hdr_blob_id = 0;
|
render->hdr_blob_id = 0;
|
||||||
|
#if 0
|
||||||
|
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||||
eglDestroySurface(eglDisplay, eglSurface);
|
eglDestroySurface(eglDisplay, eglSurface);
|
||||||
EglCheck();
|
EglCheck();
|
||||||
gbm_surface_destroy(gbm.surface);
|
|
||||||
eglDestroyContext(eglDisplay, eglContext);
|
|
||||||
EglCheck();
|
|
||||||
eglDestroyContext(eglDisplay, eglSharedContext);
|
eglDestroyContext(eglDisplay, eglSharedContext);
|
||||||
EglCheck();
|
EglCheck();
|
||||||
|
eglDestroyContext(eglDisplay, eglContext);
|
||||||
|
EglCheck();
|
||||||
eglSharedContext = NULL;
|
eglSharedContext = NULL;
|
||||||
|
eglContext = NULL;
|
||||||
eglTerminate(eglDisplay);
|
eglTerminate(eglDisplay);
|
||||||
EglCheck();
|
EglCheck();
|
||||||
|
eglDisplay = NULL;
|
||||||
|
#endif
|
||||||
|
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||||
|
eglDestroySurface(eglDisplay, eglSurface);
|
||||||
|
EglCheck();
|
||||||
|
eglSurface = NULL;
|
||||||
|
gbm_surface_destroy(gbm.surface);
|
||||||
gbm_device_destroy(gbm.dev);
|
gbm_device_destroy(gbm.dev);
|
||||||
drmDropMaster(render->fd_drm);
|
drmDropMaster(render->fd_drm);
|
||||||
close(render->fd_drm);
|
close(render->fd_drm);
|
||||||
eglDisplay = NULL;
|
|
||||||
free(render);
|
free(render);
|
||||||
|
render = NULL;
|
||||||
|
Debug(3, "nach drm clean up\n");
|
||||||
}
|
}
|
@ -61,7 +61,7 @@ extern void ToggleLUT();
|
|||||||
/// vdr-plugin version number.
|
/// vdr-plugin version number.
|
||||||
/// Makefile extracts the version number for generating the file name
|
/// Makefile extracts the version number for generating the file name
|
||||||
/// for the distribution archive.
|
/// for the distribution archive.
|
||||||
static const char *const VERSION = "3.19"
|
static const char *const VERSION = "3.20"
|
||||||
#ifdef GIT_REV
|
#ifdef GIT_REV
|
||||||
"-GIT" GIT_REV
|
"-GIT" GIT_REV
|
||||||
#endif
|
#endif
|
||||||
|
35
video.c
35
video.c
@ -1246,14 +1246,22 @@ static void EglExit(void) {
|
|||||||
glxSharedContext = NULL;
|
glxSharedContext = NULL;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (eglGetCurrentContext() == eglContext) {
|
#ifdef USE_DRM
|
||||||
// if currently used, set to none
|
drm_clean_up();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||||
|
|
||||||
|
if (eglSurface) {
|
||||||
|
eglDestroySurface(eglDisplay, eglSurface);
|
||||||
|
EglCheck();
|
||||||
|
eglSurface = NULL;
|
||||||
}
|
}
|
||||||
#ifndef USE_DRM
|
|
||||||
if (eglSharedContext) {
|
if (eglSharedContext) {
|
||||||
eglDestroyContext(eglDisplay, eglSharedContext);
|
eglDestroyContext(eglDisplay, eglSharedContext);
|
||||||
EglCheck();
|
EglCheck();
|
||||||
|
eglSharedContext = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eglContext) {
|
if (eglContext) {
|
||||||
@ -1261,13 +1269,8 @@ static void EglExit(void) {
|
|||||||
EglCheck();
|
EglCheck();
|
||||||
eglContext = NULL;
|
eglContext = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
eglTerminate(eglDisplay);
|
eglTerminate(eglDisplay);
|
||||||
#endif
|
eglDisplay = NULL;
|
||||||
|
|
||||||
#ifdef USE_DRM
|
|
||||||
drm_clean_up();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -3001,10 +3004,12 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder *decoder, AVCodecContext
|
|||||||
#ifdef CUVID
|
#ifdef CUVID
|
||||||
ist->active_hwaccel_id = HWACCEL_CUVID;
|
ist->active_hwaccel_id = HWACCEL_CUVID;
|
||||||
#else
|
#else
|
||||||
if (VideoDeinterlace[decoder->Resolution]) // need deinterlace
|
if (VideoDeinterlace[decoder->Resolution]) {// need deinterlace
|
||||||
ist->filter = 1; // init deint vaapi
|
ist->filter = 1; // init deint vaapi
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
ist->filter = 0;
|
ist->filter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
ist->active_hwaccel_id = HWACCEL_VAAPI;
|
ist->active_hwaccel_id = HWACCEL_VAAPI;
|
||||||
#endif
|
#endif
|
||||||
@ -7094,6 +7099,14 @@ void VideoInit(const char *display_name) {
|
|||||||
xcb_screen_iterator_t screen_iter;
|
xcb_screen_iterator_t screen_iter;
|
||||||
xcb_screen_t const *screen;
|
xcb_screen_t const *screen;
|
||||||
|
|
||||||
|
#ifdef VAAPI
|
||||||
|
VideoDeinterlace[0] = 1; // 576i
|
||||||
|
VideoDeinterlace[1] = 0; // mode[1]; // 720p
|
||||||
|
VideoDeinterlace[2] = 1; // fake 1080
|
||||||
|
VideoDeinterlace[3] = 1; // 1080
|
||||||
|
VideoDeinterlace[4] = 0; // mode[4]; 2160p
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_DRM
|
#ifdef USE_DRM
|
||||||
VideoInitDrm();
|
VideoInitDrm();
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user