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:
		
							
								
								
									
										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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user