mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Fix buf: VDPAU looses preemption callback.
This commit is contained in:
parent
71f786711b
commit
09d8588588
@ -1,6 +1,7 @@
|
|||||||
User johns
|
User johns
|
||||||
Date:
|
Date:
|
||||||
|
|
||||||
|
Fix bug: VDPAU looses preemption callback.
|
||||||
Fix bug: X11 server keeps sending USR1 signals, which confuses suspend.
|
Fix bug: X11 server keeps sending USR1 signals, which confuses suspend.
|
||||||
Show message for hot-keys.
|
Show message for hot-keys.
|
||||||
Fix bug: playback errors with old PES recordings.
|
Fix bug: playback errors with old PES recordings.
|
||||||
|
20
video.c
20
video.c
@ -6291,6 +6291,8 @@ static int VdpauInit(const char *display_name)
|
|||||||
}
|
}
|
||||||
// FIXME: does only check for rgba formats, but no action
|
// 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
|
// Create presentation queue, only one queue pro window
|
||||||
//
|
//
|
||||||
@ -7830,10 +7832,6 @@ static int VdpauPreemptionRecover(void)
|
|||||||
VdpStatus status;
|
VdpStatus status;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
VdpauPreemption = 0;
|
|
||||||
|
|
||||||
Debug(3, "video/vdpau: display preempted\n");
|
|
||||||
|
|
||||||
status =
|
status =
|
||||||
vdp_device_create_x11(XlibDisplay, DefaultScreen(XlibDisplay),
|
vdp_device_create_x11(XlibDisplay, DefaultScreen(XlibDisplay),
|
||||||
&VdpauDevice, &VdpauGetProcAddress);
|
&VdpauDevice, &VdpauGetProcAddress);
|
||||||
@ -7841,6 +7839,17 @@ static int VdpauPreemptionRecover(void)
|
|||||||
VdpauPreemption = 1;
|
VdpauPreemption = 1;
|
||||||
return -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();
|
VdpauInitOutputQueue();
|
||||||
|
|
||||||
@ -7862,8 +7871,8 @@ static int VdpauPreemptionRecover(void)
|
|||||||
VdpauOsdBitmapSurface[i] = VDP_INVALID_HANDLE;
|
VdpauOsdBitmapSurface[i] = VDP_INVALID_HANDLE;
|
||||||
#else
|
#else
|
||||||
VdpauOsdOutputSurface[i] = VDP_INVALID_HANDLE;
|
VdpauOsdOutputSurface[i] = VDP_INVALID_HANDLE;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
VdpauOsdInit(OsdWidth, OsdHeight);
|
VdpauOsdInit(OsdWidth, OsdHeight);
|
||||||
|
|
||||||
@ -7909,6 +7918,7 @@ static void VdpauDisplayHandlerThread(void)
|
|||||||
VdpauDecoder *decoder;
|
VdpauDecoder *decoder;
|
||||||
|
|
||||||
if (!(decoder = VdpauDecoders[0])) { // no stream available
|
if (!(decoder = VdpauDecoders[0])) { // no stream available
|
||||||
|
usleep(15 * 1000);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user