mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 21:56:42 +00:00
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:
parent
07481e78a3
commit
f4ba6ce76b
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user