diff options
author | Johns <johns98@gmx.net> | 2012-01-24 00:32:07 +0100 |
---|---|---|
committer | Johns <johns98@gmx.net> | 2012-01-24 00:32:07 +0100 |
commit | 2ac2eb39c633872b8bb5183854cef39722df4c90 (patch) | |
tree | 32f2e0c5cd721e94a32c1b879492e182b8d61fe1 | |
parent | 217545542d79137d9ce42ad8fed8376db682feba (diff) | |
download | vdr-plugin-softhddevice-2ac2eb39c633872b8bb5183854cef39722df4c90.tar.gz vdr-plugin-softhddevice-2ac2eb39c633872b8bb5183854cef39722df4c90.tar.bz2 |
Workaround for dead-lock in VdpauExit.
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | Todo | 1 | ||||
-rw-r--r-- | video.c | 13 |
3 files changed, 13 insertions, 2 deletions
@@ -1,6 +1,7 @@ User johns Date: + Workaround for dead-lock in VdpauExit. VDPAU: Add very primitive software scaler for grab image. VA-API: Add auto-crop support. Suspend can close/open X11 window, connection and audio device. @@ -34,6 +34,7 @@ video: grab image with scaling support suspendoutput didn't show logo or black pictures (must detect video format to show image) + first OSD can show random chaos vdpau: VdpPreemptionCallback handling (under construction) @@ -4564,6 +4564,7 @@ static void VdpauCleanup(VdpauDecoder * decoder) int i; if (decoder->VideoDecoder != VDP_INVALID_HANDLE) { + // hangs in lock status = VdpauDecoderDestroy(decoder->VideoDecoder); if (status != VDP_STATUS_OK) { Error(_("video/vdpau: can't destroy video decoder: %s\n"), @@ -5137,7 +5138,6 @@ static void VideoVdpauExit(void) } if (VdpauDevice) { - xcb_flush(Connection); VdpauExitOutputQueue(); // FIXME: more VDPAU cleanups... @@ -7360,6 +7360,12 @@ static void *VideoDisplayHandlerThread(void *dummy) #endif for (;;) { + /* other way to try to fix dead-lock with VdpauExit + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); + pthread_testcancel(); + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); + */ + VideoPollEvent(); #ifdef USE_VAAPI @@ -8231,7 +8237,7 @@ void VideoInit(const char *display_name) Fatal(_("video: Can't connect to X11 server on '%s'"), display_name); // FIXME: we need to retry connection } - XInitThreads(); + // XInitThreads(); // Convert XLIB display to XCB connection if (!(Connection = XGetXCBConnection(XlibDisplay))) { Fatal(_("video: Can't convert XLIB display to XCB connection")); @@ -8338,6 +8344,9 @@ void VideoExit(void) } #ifdef USE_VIDEO_THREAD VideoThreadExit(); + // VDPAU cleanup hangs in XLockDisplay every 100 exits + // XUnlockDisplay(XlibDisplay); + // xcb_flush(Connection); #endif if (VideoUsedModule) { VideoUsedModule->Exit(); |