mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-30 14:16:40 +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