summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphintuka <phintuka>2012-01-19 11:10:28 +0000
committerphintuka <phintuka>2012-01-19 11:10:28 +0000
commite9e80ac34e002615f68c71ca400679f20e39d1ee (patch)
tree20a0b9ab634797b5b4bc49cb9fc13cc4f85067f6
parent26a37a70644510644e0f813092f0fe66a552acda (diff)
downloadxineliboutput-e9e80ac34e002615f68c71ca400679f20e39d1ee.tar.gz
xineliboutput-e9e80ac34e002615f68c71ca400679f20e39d1ee.tar.bz2
Added xine-lib patch from patch #3474166
(Thanks to grueni75)
-rw-r--r--patches/xinelib-1.2.0_vdpau_black_frame.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/patches/xinelib-1.2.0_vdpau_black_frame.patch b/patches/xinelib-1.2.0_vdpau_black_frame.patch
new file mode 100644
index 00000000..0066747e
--- /dev/null
+++ b/patches/xinelib-1.2.0_vdpau_black_frame.patch
@@ -0,0 +1,43 @@
+diff --git a/src/video_out/video_out_vdpau.c b/src/video_out/video_out_vdpau.c
+--- a/src/video_out/video_out_vdpau.c
++++ b/src/video_out/video_out_vdpau.c
+@@ -113,7 +113,9 @@ VdpOutputSurfaceRenderBlendState blend =
+
+ VdpDevice vdp_device;
+ VdpPresentationQueue vdp_queue;
++VdpPresentationQueue prev_vdp_queue = VDP_INVALID_HANDLE;
+ VdpPresentationQueueTarget vdp_queue_target;
++VdpPresentationQueueTarget prev_vdp_queue_target = VDP_INVALID_HANDLE;
+
+ VdpDeviceDestroy *vdp_device_destroy;
+
+@@ -2234,8 +2236,16 @@ static int vdpau_gui_data_exchange (vo_d
+ pthread_mutex_lock(&this->drawable_lock); /* wait for other thread which is currently displaying */
+ DO_LOCKDISPLAY
+ this->drawable = (Drawable) data;
+- vdp_queue_destroy( vdp_queue );
+- vdp_queue_target_destroy( vdp_queue_target );
++
++ // Do not immideatly destory queue as the window would display a black frame
++ // Patch for xineliboutput to allow opening the hud without black frame
++ if (prev_vdp_queue!=VDP_INVALID_HANDLE) {
++ vdp_queue_destroy(prev_vdp_queue);
++ vdp_queue_target_destroy(prev_vdp_queue_target);
++ }
++ prev_vdp_queue=vdp_queue;
++ prev_vdp_queue_target=vdp_queue_target;
++
+ st = vdp_queue_target_create_x11( vdp_device, this->drawable, &vdp_queue_target );
+ if ( st != VDP_STATUS_OK ) {
+ fprintf(stderr, "vo_vdpau: FATAL !! Can't recreate presentation queue target after drawable change !!\n" );
+@@ -2298,6 +2308,10 @@ static void vdpau_dispose (vo_driver_t *
+
+ if ( vdp_queue_target != VDP_INVALID_HANDLE )
+ vdp_queue_target_destroy( vdp_queue_target );
++ if ( prev_vdp_queue != VDP_INVALID_HANDLE )
++ vdp_queue_destroy( prev_vdp_queue );
++ if ( prev_vdp_queue_target != VDP_INVALID_HANDLE )
++ vdp_queue_target_destroy( prev_vdp_queue_target );
+
+ if ( this->video_mixer!=VDP_INVALID_HANDLE )
+ vdp_video_mixer_destroy( this->video_mixer );