diff options
author | Johns <johns98@gmx.net> | 2012-04-12 15:38:22 +0200 |
---|---|---|
committer | Johns <johns98@gmx.net> | 2012-04-12 15:38:22 +0200 |
commit | 09d858858874d714f4d66c5eff8118b40878902e (patch) | |
tree | a426b0576b9cd055f0ac88152625de95d3e5d310 | |
parent | 71f786711ba202b553e46eeee4a9c43972d03a8c (diff) | |
download | vdr-plugin-softhddevice-09d858858874d714f4d66c5eff8118b40878902e.tar.gz vdr-plugin-softhddevice-09d858858874d714f4d66c5eff8118b40878902e.tar.bz2 |
Fix buf: VDPAU looses preemption callback.
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | video.c | 20 |
2 files changed, 16 insertions, 5 deletions
@@ -1,6 +1,7 @@ User johns Date: + Fix bug: VDPAU looses preemption callback. Fix bug: X11 server keeps sending USR1 signals, which confuses suspend. Show message for hot-keys. Fix bug: playback errors with old PES recordings. @@ -6291,6 +6291,8 @@ static int VdpauInit(const char *display_name) } // FIXME: does only check for rgba formats, but no action + // FIXME: what if preemption happens during setup? + // // Create presentation queue, only one queue pro window // @@ -7830,10 +7832,6 @@ static int VdpauPreemptionRecover(void) VdpStatus status; int i; - VdpauPreemption = 0; - - Debug(3, "video/vdpau: display preempted\n"); - status = vdp_device_create_x11(XlibDisplay, DefaultScreen(XlibDisplay), &VdpauDevice, &VdpauGetProcAddress); @@ -7841,6 +7839,17 @@ static int VdpauPreemptionRecover(void) VdpauPreemption = 1; return -1; } + // VDPAU seems to loose the callback during preemption + status = + VdpauPreemptionCallbackRegister(VdpauDevice, VdpauPreemptionCallback, + NULL); + if (status != VDP_STATUS_OK) { + Error(_("video/vdpau: can't register preemption callback: %s\n"), + VdpauGetErrorString(status)); + } + + VdpauPreemption = 0; + Debug(3, "video/vdpau: display preemption recovery\n"); VdpauInitOutputQueue(); @@ -7862,8 +7871,8 @@ static int VdpauPreemptionRecover(void) VdpauOsdBitmapSurface[i] = VDP_INVALID_HANDLE; #else VdpauOsdOutputSurface[i] = VDP_INVALID_HANDLE; - } #endif + } VdpauOsdInit(OsdWidth, OsdHeight); @@ -7909,6 +7918,7 @@ static void VdpauDisplayHandlerThread(void) VdpauDecoder *decoder; if (!(decoder = VdpauDecoders[0])) { // no stream available + usleep(15 * 1000); return; } |