xbmc: add patch to lock x11 on init/uninit vdpau shares display

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2011-12-29 03:42:12 +01:00
parent 07481e78a3
commit f4ba6ce76b

View File

@ -0,0 +1,78 @@
From 0a693dcaaf74b6d1ce9341143db6584c42470644 Mon Sep 17 00:00:00 2001
From: Rainer Hochecker <fernetmenta@online.de>
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