mirror of
				https://github.com/jojo61/vdr-plugin-softhdcuvid.git
				synced 2025-03-01 10:39:28 +00:00 
			
		
		
		
	more DETA fixes
This commit is contained in:
		| @@ -776,7 +776,6 @@ bool cOglCmdCopyBufferToOutputFb::Execute(void) { | ||||
|     fb->Blit(x, y + fb->Height(), x + fb->Width(), y); | ||||
|     oFb->Unbind(); | ||||
| 	pthread_mutex_unlock(&OSDMutex); | ||||
| 	printf("osdput  fb x %d y %d  %dx%d  oFb %dx%d\n",x,y,fb->Width(), fb->Height(),oFb->Width(), oFb->Height()); | ||||
|     ActivateOsd(oFb->texture,x, y ,fb->Width(), fb->Height()); | ||||
| 	 | ||||
|     return true; | ||||
| @@ -2023,6 +2022,7 @@ void cOglOsd::Flush(void) { | ||||
|         } | ||||
|     } | ||||
|     oglThread->DoCmd(new cOglCmdCopyBufferToOutputFb(bFb, oFb, Left(), Top())); | ||||
|  | ||||
|     //dsyslog("[softhddev]End Flush at %" PRIu64 ", duration %d", cTimeMs::Now(), (int)(cTimeMs::Now()-start)); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -3644,6 +3644,10 @@ cString cPluginSoftHdDevice::SVDRPCommand(const char *command, | ||||
| 		cControl::Attach(); | ||||
| 		Suspend(1, 1, 0); | ||||
| 		SuspendMode = SUSPEND_DETACHED; | ||||
| #ifdef USE_OPENGLOSD_no | ||||
| 		dsyslog("[softhddev]stopping Ogl Thread svdrp DETA"); | ||||
| 		cSoftOsdProvider::StopOpenGlThread(); | ||||
| #endif | ||||
| 		return "SoftHdDevice is detached"; | ||||
|     } | ||||
|     if (!strcasecmp(command, "ATTA")) { | ||||
|   | ||||
							
								
								
									
										22
									
								
								video.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								video.c
									
									
									
									
									
								
							| @@ -1098,7 +1098,8 @@ static void GlxSetupWindow(xcb_window_t window, int width, int height, GLXContex | ||||
| static void GlxInit(void) | ||||
| { | ||||
|  | ||||
|     XVisualInfo *vi; | ||||
|     XVisualInfo *vi=NULL; | ||||
| 	 | ||||
| 		//The desired 30-bit color visual | ||||
| 	int attributeList10[] = {  | ||||
| 		GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,  | ||||
| @@ -1798,7 +1799,7 @@ static int CuvidGetVideoSurface0(CuvidDecoder * decoder) | ||||
|  | ||||
|     if (!decoder->SurfaceFreeN) { | ||||
| //	Error(_("video/cuvid: out of surfaces\n")); | ||||
| 		return 0; | ||||
| 		return -1; | ||||
|     } | ||||
|     // use oldest surface | ||||
|     surface = decoder->SurfacesFree[0]; | ||||
| @@ -1872,8 +1873,8 @@ static CuvidDecoder *CuvidNewHwDecoder(VideoStream * stream) | ||||
| 		return NULL; | ||||
|     } | ||||
| 	 | ||||
|     if (av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_CUDA, X11DisplayName, NULL, 0)) { | ||||
| 		Fatal("codec: can't allocate HW video codec context"); | ||||
|     if (i = av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_CUDA, X11DisplayName, NULL, 0)) { | ||||
| 		Fatal("codec: can't allocate HW video codec context err &d",i); | ||||
|     } | ||||
|     HwDeviceContext = av_buffer_ref(hw_device_ctx); | ||||
| 	 | ||||
| @@ -1968,11 +1969,13 @@ static void CuvidDelHwDecoder(CuvidDecoder * decoder) | ||||
| { | ||||
|     int i,n; | ||||
| Debug(3,"cuvid del hw decoder  cuda_ctx %p\n",decoder->cuda_ctx); | ||||
| 	pthread_mutex_lock(&VideoLockMutex); | ||||
| 	glXMakeCurrent(XlibDisplay, VideoWindow, GlxSharedContext); | ||||
| 	GlxCheck(); | ||||
|     if (decoder->SurfaceFreeN || decoder->SurfaceUsedN) { | ||||
| 		CuvidDestroySurfaces(decoder); | ||||
|     } | ||||
| 	pthread_mutex_unlock(&VideoLockMutex); | ||||
| #if 0	 | ||||
|     if (decoder->cuda_ctx) { | ||||
|         cuCtxDestroy (decoder->cuda_ctx);    | ||||
| @@ -2307,6 +2310,9 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder * decoder, | ||||
| 		// check supported pixel format with entry point | ||||
| 		switch (*fmt_idx) { | ||||
| 			case AV_PIX_FMT_CUDA: | ||||
| #ifdef VAAPI | ||||
| 			case AV_PIX_FMT_VAAPI_VLD: | ||||
| #endif | ||||
| 				break; | ||||
| 			default: | ||||
| 				continue; | ||||
| @@ -2319,10 +2325,11 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder * decoder, | ||||
| 		Error(_("video: no valid pixfmt found\n")); | ||||
|     } | ||||
|  | ||||
|  | ||||
| #ifndef VAAPI | ||||
|     if (*fmt_idx != AV_PIX_FMT_CUDA) { | ||||
| 		Fatal(_("video: no valid profile found\n")); | ||||
|     } | ||||
| #endif | ||||
|     Debug(3, "video: create decoder 16bit?=%d %dx%d \n",bitformat16, video_ctx->width, video_ctx->height); | ||||
|  | ||||
|  | ||||
| @@ -2355,7 +2362,7 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder * decoder, | ||||
|         CuvidSetupOutput(decoder); | ||||
|         return AV_PIX_FMT_CUDA; | ||||
|     } | ||||
| 	Fatal(_("CUVID Not found\n")); | ||||
| 	Fatal(_("NO Format valid")); | ||||
|     return *fmt_idx; | ||||
| } | ||||
|  | ||||
| @@ -2854,6 +2861,9 @@ Debug(3,"fmt %02d:%02d  width %d:%d hight %d:%d\n,",decoder->PixFmt,video_ctx->p | ||||
| 		 | ||||
| 		surface = CuvidGetVideoSurface0(decoder); | ||||
| 		 | ||||
| 		if (surface == -1)     // no free surfaces | ||||
| 			return; | ||||
| 		 | ||||
| 		// copy to texture | ||||
| 		generateCUDAImage(decoder,surface,frame,w,h,decoder->PixFmt==AV_PIX_FMT_NV12?1:2); | ||||
| // printf("put cuda %d ",surface);		 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user