diff --git a/openglosd.cpp b/openglosd.cpp index eb3221b..9659b29 100644 --- a/openglosd.cpp +++ b/openglosd.cpp @@ -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)); } diff --git a/softhdcuvid.cpp b/softhdcuvid.cpp index 9d7dbbd..6905688 100644 --- a/softhdcuvid.cpp +++ b/softhdcuvid.cpp @@ -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")) { diff --git a/video.c b/video.c index ed0ee4e..eb59d6f 100644 --- a/video.c +++ b/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);