diff --git a/packages/mediacenter/xbmc/patches/xbmc-22ad8e4-911-vdpau_lock_x11_on_init-uninit_vdpau_shares_display.patch b/packages/mediacenter/xbmc/patches/xbmc-22ad8e4-911-vdpau_lock_x11_on_init-uninit_vdpau_shares_display.patch new file mode 100644 index 0000000000..c91c728fcb --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-22ad8e4-911-vdpau_lock_x11_on_init-uninit_vdpau_shares_display.patch @@ -0,0 +1,78 @@ +From 0a693dcaaf74b6d1ce9341143db6584c42470644 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sat, 10 Dec 2011 12:20:15 +0100 +Subject: [PATCH] vdpau: lock x11 on init/uninit, vdpau shares display + connection with main thread + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 12 ++++++++++-- + 1 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +index 823686c..f2cce8a 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +@@ -412,7 +412,6 @@ int CVDPAU::Check(AVCodecContext* avctx) + { + CLog::Log(LOGNOTICE,"Attempting recovery"); + +- CSingleLock gLock(g_graphicsContext); + CExclusiveLock lock(m_DecoderSection); + + FiniVDPAUOutput(); +@@ -441,6 +440,8 @@ void CVDPAU::CheckFeatures() + { + if (videoMixer == VDP_INVALID_HANDLE) + { ++ X11Lock xlock(g_Windowing); ++ + CLog::Log(LOGNOTICE, " (VDPAU) Creating the video mixer"); + // Creation of VideoMixer. + VdpVideoMixerParameter parameters[] = { +@@ -673,6 +674,8 @@ void CVDPAU::SetDeinterlacing() + + void CVDPAU::InitVDPAUProcs() + { ++ X11Lock xlock(g_Windowing); ++ + char* error; + + (void)dlerror(); +@@ -690,7 +693,6 @@ void CVDPAU::InitVDPAUProcs() + + if (dl_vdp_device_create_x11) + { +- CSingleLock lock(g_graphicsContext); + m_Display = g_Windowing.GetDisplay(); + } + +@@ -779,6 +781,8 @@ void CVDPAU::InitVDPAUProcs() + + void CVDPAU::FiniVDPAUProcs() + { ++ X11Lock xlock(g_Windowing); ++ + while (!m_videoSurfaces.empty()) + { + vdpau_render_state *render = m_videoSurfaces.back(); +@@ -931,6 +935,8 @@ bool CVDPAU::ConfigOutputMethod(AVCodecContext *avctx, AVFrame *pFrame) + + FiniOutputMethod(); + ++ X11Lock xlock(g_Windowing); ++ + MakePixmap(avctx->width,avctx->height); + + vdp_st = vdp_presentation_queue_target_create_x11(vdp_device, +@@ -979,6 +985,8 @@ bool CVDPAU::ConfigOutputMethod(AVCodecContext *avctx, AVFrame *pFrame) + + bool CVDPAU::FiniOutputMethod() + { ++ X11Lock xlock(g_Windowing); ++ + VdpStatus vdp_st; + + if (vdp_flip_queue != VDP_INVALID_HANDLE) +-- +1.7.5.4 +