mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 07:27:49 +00:00
Merge branch 'openelec-eden' of github.com:OpenELEC/OpenELEC.tv into openelec-pvr
This commit is contained in:
commit
00ee8cfdb4
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc-theme-Confluence"
|
||||
PKG_VERSION="e825052"
|
||||
PKG_VERSION="30a9070"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc"
|
||||
PKG_VERSION="e825052"
|
||||
PKG_VERSION="30a9070"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -1,72 +0,0 @@
|
||||
From 76b51cce5dd64d6f33348cd36eddce95d571f783 Mon Sep 17 00:00:00 2001
|
||||
From: Yuriy Romanenko <yromanen@gmail.com>
|
||||
Date: Thu, 24 Feb 2011 12:03:53 +0200
|
||||
Subject: [PATCH] linux: VAAPI fix from bug #10928
|
||||
http://trac.xbmc.org/ticket/10928
|
||||
|
||||
Signed-off-by: Joakim Plate <elupus@xbmc.org>
|
||||
---
|
||||
xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 20 ++++++++++++++------
|
||||
1 files changed, 14 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
index 0aac8fe..b03ea5c 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
@@ -149,10 +149,10 @@ int CDecoder::GetBuffer(AVCodecContext *avctx, AVFrame *pic)
|
||||
{
|
||||
VASurfaceID surface = GetSurfaceID(pic);
|
||||
CSurface* wrapper = NULL;
|
||||
+ std::list<CSurfacePtr>::iterator it = m_surfaces_free.begin();
|
||||
if(surface)
|
||||
{
|
||||
/* reget call */
|
||||
- std::list<CSurfacePtr>::iterator it = m_surfaces_free.begin();
|
||||
for(; it != m_surfaces_free.end(); it++)
|
||||
{
|
||||
if((*it)->m_id == surface)
|
||||
@@ -171,20 +171,28 @@ int CDecoder::GetBuffer(AVCodecContext *avctx, AVFrame *pic)
|
||||
}
|
||||
else
|
||||
{
|
||||
- if(m_surfaces_free.empty())
|
||||
+ // To avoid stutter, we scan the free surface pool (provided by decoder) for surfaces
|
||||
+ // that are 100% not in use by renderer. The pointers to these surfaces have a use_count of 1.
|
||||
+ for (; it != m_surfaces_free.end() && it->use_count() > 1; it++) {}
|
||||
+
|
||||
+ // If we have zero free surface from decoder OR all free surfaces are in use by renderer, we allocate a new surface
|
||||
+ if (it == m_surfaces_free.end())
|
||||
{
|
||||
+ if (!m_surfaces_free.empty()) CLog::Log(LOGERROR, "VAAPI - renderer still using all freed up surfaces by decoder");
|
||||
CLog::Log(LOGERROR, "VAAPI - unable to find free surface, trying to allocate a new one");
|
||||
if(!EnsureSurfaces(avctx, m_surfaces_count+1) || m_surfaces_free.empty())
|
||||
{
|
||||
CLog::Log(LOGERROR, "VAAPI - unable to find free surface");
|
||||
return -1;
|
||||
}
|
||||
+ // Set itarator position to the newly allocated surface (end-1)
|
||||
+ it = m_surfaces_free.end(); it--;
|
||||
}
|
||||
/* getbuffer call */
|
||||
- wrapper = m_surfaces_free.front().get();
|
||||
+ wrapper = it->get();
|
||||
surface = wrapper->m_id;
|
||||
- m_surfaces_used.push_back(m_surfaces_free.front());
|
||||
- m_surfaces_free.pop_front();
|
||||
+ m_surfaces_used.push_back(*it);
|
||||
+ m_surfaces_free.erase(it);
|
||||
}
|
||||
|
||||
pic->type = FF_BUFFER_TYPE_USER;
|
||||
@@ -349,7 +357,7 @@ bool CDecoder::EnsureContext(AVCodecContext *avctx)
|
||||
else
|
||||
m_refs = 2;
|
||||
}
|
||||
- return EnsureSurfaces(avctx, m_refs + 1 + 1);
|
||||
+ return EnsureSurfaces(avctx, m_refs + 3);
|
||||
}
|
||||
|
||||
bool CDecoder::EnsureSurfaces(AVCodecContext *avctx, unsigned n_surfaces_count)
|
||||
--
|
||||
1.7.5.4
|
||||
|
@ -1,50 +0,0 @@
|
||||
From acef66ba6f0bf1db31906c7c7c4f7c83cfee44c1 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle Hill <kyleh@htpc.(none)>
|
||||
Date: Sat, 14 May 2011 17:23:45 -0500
|
||||
Subject: [PATCH] Fix NULL -> 0 conversion warnings in VAAPI.cpp
|
||||
|
||||
---
|
||||
xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 10 +++++-----
|
||||
1 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
index b03ea5c..d9d2bd2 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
@@ -115,8 +115,8 @@ CDecoder::CDecoder()
|
||||
{
|
||||
m_refs = 0;
|
||||
m_surfaces_count = 0;
|
||||
- m_config = NULL;
|
||||
- m_context = NULL;
|
||||
+ m_config = 0;
|
||||
+ m_context = 0;
|
||||
m_hwaccel = (vaapi_context*)calloc(1, sizeof(vaapi_context));
|
||||
}
|
||||
|
||||
@@ -212,11 +212,11 @@ void CDecoder::Close()
|
||||
{
|
||||
if(m_context)
|
||||
WARN(vaDestroyContext(m_display->get(), m_context))
|
||||
- m_context = NULL;
|
||||
+ m_context = 0;
|
||||
|
||||
if(m_config)
|
||||
WARN(vaDestroyConfig(m_display->get(), m_config))
|
||||
- m_config = NULL;
|
||||
+ m_config = 0;
|
||||
|
||||
m_surfaces_free.clear();
|
||||
m_surfaces_used.clear();
|
||||
@@ -384,7 +384,7 @@ bool CDecoder::EnsureSurfaces(AVCodecContext *avctx, unsigned n_surfaces_count)
|
||||
|
||||
if(m_context)
|
||||
WARN(vaDestroyContext(m_display->get(), m_context))
|
||||
- m_context = NULL;
|
||||
+ m_context = 0;
|
||||
|
||||
CHECK(vaCreateContext(m_display->get()
|
||||
, m_config
|
||||
--
|
||||
1.7.5.4
|
||||
|
Loading…
x
Reference in New Issue
Block a user