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;
|
||||
has_modeset = 1;
|
||||
}
|
||||
|
||||
drmModeSetCrtc(render->fd_drm, render->crtc_id, fb, 0, 0, &render->connector_id, 1, &render->mode);
|
||||
|
||||
if (previous_bo) {
|
||||
@ -562,15 +563,16 @@ static void drm_clean_up() {
|
||||
return;
|
||||
Debug(3, "drm clean up\n");
|
||||
|
||||
|
||||
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);
|
||||
drmModeFreeCrtc(render->saved_crtc);
|
||||
|
||||
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,
|
||||
render->saved_crtc->y, &render->connector_id, 1, &render->saved_crtc->mode);
|
||||
drmModeFreeCrtc(render->saved_crtc);
|
||||
|
||||
if (has_modeset) {
|
||||
drmModeAtomicReqPtr ModeReq;
|
||||
const uint32_t flags = DRM_MODE_ATOMIC_ALLOW_MODESET;
|
||||
@ -613,22 +615,29 @@ static void drm_clean_up() {
|
||||
if (render->hdr_blob_id)
|
||||
drmModeDestroyPropertyBlob(render->fd_drm, render->hdr_blob_id);
|
||||
render->hdr_blob_id = 0;
|
||||
|
||||
#if 0
|
||||
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||
eglDestroySurface(eglDisplay, eglSurface);
|
||||
EglCheck();
|
||||
gbm_surface_destroy(gbm.surface);
|
||||
eglDestroyContext(eglDisplay, eglContext);
|
||||
EglCheck();
|
||||
eglDestroyContext(eglDisplay, eglSharedContext);
|
||||
EglCheck();
|
||||
eglDestroyContext(eglDisplay, eglContext);
|
||||
EglCheck();
|
||||
eglSharedContext = NULL;
|
||||
|
||||
eglContext = NULL;
|
||||
eglTerminate(eglDisplay);
|
||||
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);
|
||||
drmDropMaster(render->fd_drm);
|
||||
close(render->fd_drm);
|
||||
eglDisplay = NULL;
|
||||
free(render);
|
||||
render = NULL;
|
||||
Debug(3, "nach drm clean up\n");
|
||||
}
|
@ -61,7 +61,7 @@ extern void ToggleLUT();
|
||||
/// vdr-plugin version number.
|
||||
/// Makefile extracts the version number for generating the file name
|
||||
/// for the distribution archive.
|
||||
static const char *const VERSION = "3.19"
|
||||
static const char *const VERSION = "3.20"
|
||||
#ifdef GIT_REV
|
||||
"-GIT" GIT_REV
|
||||
#endif
|
||||
|
37
video.c
37
video.c
@ -1246,14 +1246,22 @@ static void EglExit(void) {
|
||||
glxSharedContext = NULL;
|
||||
}
|
||||
#else
|
||||
if (eglGetCurrentContext() == eglContext) {
|
||||
// if currently used, set to none
|
||||
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||
#ifdef USE_DRM
|
||||
drm_clean_up();
|
||||
|
||||
#endif
|
||||
|
||||
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||
|
||||
if (eglSurface) {
|
||||
eglDestroySurface(eglDisplay, eglSurface);
|
||||
EglCheck();
|
||||
eglSurface = NULL;
|
||||
}
|
||||
#ifndef USE_DRM
|
||||
if (eglSharedContext) {
|
||||
eglDestroyContext(eglDisplay, eglSharedContext);
|
||||
EglCheck();
|
||||
eglSharedContext = NULL;
|
||||
}
|
||||
|
||||
if (eglContext) {
|
||||
@ -1261,13 +1269,8 @@ static void EglExit(void) {
|
||||
EglCheck();
|
||||
eglContext = NULL;
|
||||
}
|
||||
|
||||
eglTerminate(eglDisplay);
|
||||
#endif
|
||||
|
||||
#ifdef USE_DRM
|
||||
drm_clean_up();
|
||||
#endif
|
||||
eglDisplay = NULL;
|
||||
|
||||
#endif
|
||||
}
|
||||
@ -3001,10 +3004,12 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder *decoder, AVCodecContext
|
||||
#ifdef CUVID
|
||||
ist->active_hwaccel_id = HWACCEL_CUVID;
|
||||
#else
|
||||
if (VideoDeinterlace[decoder->Resolution]) // need deinterlace
|
||||
if (VideoDeinterlace[decoder->Resolution]) {// need deinterlace
|
||||
ist->filter = 1; // init deint vaapi
|
||||
else
|
||||
}
|
||||
else {
|
||||
ist->filter = 0;
|
||||
}
|
||||
|
||||
ist->active_hwaccel_id = HWACCEL_VAAPI;
|
||||
#endif
|
||||
@ -7094,6 +7099,14 @@ void VideoInit(const char *display_name) {
|
||||
xcb_screen_iterator_t screen_iter;
|
||||
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
|
||||
VideoInitDrm();
|
||||
#else
|
||||
|
Loading…
x
Reference in New Issue
Block a user