mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 21:56:42 +00:00
xbmc-pvr: update XVBA patches
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
8d361b078d
commit
91befb2e8e
@ -1,5 +1,5 @@
|
||||
diff --git a/configure.in b/configure.in
|
||||
index bca9239..66ccbcd 100755
|
||||
index e7045ba..e495665 100755
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -98,6 +98,8 @@ vaapi_not_found="== Could not find libva. VAAPI support disabled. =="
|
||||
@ -76,7 +76,7 @@ index bca9239..66ccbcd 100755
|
||||
if test "x$use_vdadecoder" != "xno"; then
|
||||
final_message="$final_message\n VDADecoder:\tYes"
|
||||
else
|
||||
@@ -1943,6 +1989,7 @@ AC_SUBST(USE_OPENGLES)
|
||||
@@ -1951,6 +1997,7 @@ AC_SUBST(USE_OPENGLES)
|
||||
AC_SUBST(USE_VDPAU)
|
||||
AC_SUBST(USE_VAAPI)
|
||||
AC_SUBST(USE_CRYSTALHD)
|
||||
@ -84,7 +84,7 @@ index bca9239..66ccbcd 100755
|
||||
AC_SUBST(USE_LIBSMBCLIENT)
|
||||
AC_SUBST(USE_LIBNFS)
|
||||
AC_SUBST(USE_LIBAFPCLIENT)
|
||||
@@ -2085,6 +2132,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
|
||||
@@ -2093,6 +2140,7 @@ XB_CONFIG_MODULE([lib/ffmpeg], [
|
||||
--enable-gpl \
|
||||
`if test "x$use_vdpau" != "xno"; then echo --enable-vdpau; else echo --disable-vdpau; fi` \
|
||||
`if test "x$use_vaapi" != "xno"; then echo --enable-vaapi; else echo --disable-vaapi; fi` \
|
||||
@ -93,10 +93,10 @@ index bca9239..66ccbcd 100755
|
||||
--enable-pthreads \
|
||||
--enable-runtime-cpudetect \
|
||||
diff --git a/language/English/strings.xml b/language/English/strings.xml
|
||||
index 73405bf..58887a4 100644
|
||||
index 1b2afe5..7b1b58d 100644
|
||||
--- a/language/English/strings.xml
|
||||
+++ b/language/English/strings.xml
|
||||
@@ -1230,6 +1230,8 @@
|
||||
@@ -1232,6 +1232,8 @@
|
||||
<string id="13430">Allow hardware acceleration (OpenMax)</string>
|
||||
<string id="13431">Pixel Shaders</string>
|
||||
<string id="13432">Allow hardware acceleration (VideoToolbox)</string>
|
||||
@ -963,10 +963,10 @@ index 8ec91c8..4803dd7 100644
|
||||
PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
|
||||
PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
|
||||
diff --git a/xbmc/ApplicationMessenger.cpp b/xbmc/ApplicationMessenger.cpp
|
||||
index adc89af..b5c6b1a 100644
|
||||
index b43f765..e68c630 100644
|
||||
--- a/xbmc/ApplicationMessenger.cpp
|
||||
+++ b/xbmc/ApplicationMessenger.cpp
|
||||
@@ -70,7 +70,7 @@
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -3414,7 +3414,7 @@ index 0000000..f5c8a32
|
||||
+
|
||||
+}
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
index bb88c74..f5fd833 100644
|
||||
index 036d31d..86a4bdd 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
|
||||
@@ -19,7 +19,6 @@
|
||||
@ -3425,7 +3425,7 @@ index bb88c74..f5fd833 100644
|
||||
#include "system.h"
|
||||
#ifndef __STDC_CONSTANT_MACROS
|
||||
#define __STDC_CONSTANT_MACROS
|
||||
@@ -43,6 +42,7 @@
|
||||
@@ -44,6 +43,7 @@
|
||||
#include "filesystem/Directory.h"
|
||||
#include "utils/log.h"
|
||||
#include "threads/Thread.h"
|
||||
@ -3433,7 +3433,7 @@ index bb88c74..f5fd833 100644
|
||||
#include "utils/TimeUtils.h"
|
||||
|
||||
void CDemuxStreamAudioFFmpeg::GetStreamInfo(std::string& strInfo)
|
||||
@@ -152,16 +152,12 @@ static void ff_flush_avutil_log_buffers(void)
|
||||
@@ -153,16 +153,12 @@ static void ff_flush_avutil_log_buffers(void)
|
||||
++it;
|
||||
}
|
||||
|
||||
@ -3453,7 +3453,7 @@ index bb88c74..f5fd833 100644
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -233,7 +229,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
|
||||
@@ -234,7 +230,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
|
||||
std::string strFile;
|
||||
m_iCurrentPts = DVD_NOPTS_VALUE;
|
||||
m_speed = DVD_PLAYSPEED_NORMAL;
|
||||
@ -3462,7 +3462,7 @@ index bb88c74..f5fd833 100644
|
||||
m_program = UINT_MAX;
|
||||
|
||||
if (!pInput) return false;
|
||||
@@ -505,7 +501,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
|
||||
@@ -506,7 +502,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
|
||||
|
||||
void CDVDDemuxFFmpeg::Dispose()
|
||||
{
|
||||
@ -3471,7 +3471,7 @@ index bb88c74..f5fd833 100644
|
||||
|
||||
if (m_pFormatContext)
|
||||
{
|
||||
@@ -554,7 +550,7 @@ void CDVDDemuxFFmpeg::Reset()
|
||||
@@ -555,7 +551,7 @@ void CDVDDemuxFFmpeg::Reset()
|
||||
|
||||
void CDVDDemuxFFmpeg::Flush()
|
||||
{
|
||||
@ -3480,7 +3480,7 @@ index bb88c74..f5fd833 100644
|
||||
|
||||
// naughty usage of an internal ffmpeg function
|
||||
if (m_pFormatContext)
|
||||
@@ -570,7 +566,7 @@ void CDVDDemuxFFmpeg::Abort()
|
||||
@@ -571,7 +567,7 @@ void CDVDDemuxFFmpeg::Abort()
|
||||
|
||||
void CDVDDemuxFFmpeg::SetSpeed(int iSpeed)
|
||||
{
|
||||
@ -3489,7 +3489,7 @@ index bb88c74..f5fd833 100644
|
||||
|
||||
if(!m_pFormatContext)
|
||||
return;
|
||||
@@ -632,7 +628,7 @@ double CDVDDemuxFFmpeg::ConvertTimestamp(int64_t pts, int den, int num)
|
||||
@@ -633,7 +629,7 @@ double CDVDDemuxFFmpeg::ConvertTimestamp(int64_t pts, int den, int num)
|
||||
|
||||
DemuxPacket* CDVDDemuxFFmpeg::Read()
|
||||
{
|
||||
@ -3498,7 +3498,7 @@ index bb88c74..f5fd833 100644
|
||||
|
||||
AVPacket pkt;
|
||||
DemuxPacket* pPacket = NULL;
|
||||
@@ -831,7 +827,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read()
|
||||
@@ -832,7 +828,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read()
|
||||
|
||||
bool CDVDDemuxFFmpeg::SeekTime(int time, bool backwords, double *startpts)
|
||||
{
|
||||
@ -3507,7 +3507,7 @@ index bb88c74..f5fd833 100644
|
||||
|
||||
if(time < 0)
|
||||
time = 0;
|
||||
@@ -891,7 +887,7 @@ bool CDVDDemuxFFmpeg::SeekTime(int time, bool backwords, double *startpts)
|
||||
@@ -892,7 +888,7 @@ bool CDVDDemuxFFmpeg::SeekTime(int time, bool backwords, double *startpts)
|
||||
|
||||
bool CDVDDemuxFFmpeg::SeekByte(__int64 pos)
|
||||
{
|
||||
@ -3608,10 +3608,10 @@ index 2f0b5ac..e97a14c 100644
|
||||
CDVDMessageQueue* m_pAudioQueue;
|
||||
CDVDMessageQueue* m_pVideoQueue;
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
index 6061909..af6175e 100644
|
||||
index 568ed10..abfdf2b 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||
@@ -341,7 +341,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options)
|
||||
@@ -348,7 +348,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options)
|
||||
|
||||
// if playing a file close it first
|
||||
// this has to be changed so we won't have to close it.
|
||||
@ -3620,7 +3620,7 @@ index 6061909..af6175e 100644
|
||||
CloseFile();
|
||||
|
||||
m_bAbortRequest = false;
|
||||
@@ -432,7 +432,7 @@ void CDVDPlayer::OnStartup()
|
||||
@@ -440,7 +440,7 @@ void CDVDPlayer::OnStartup()
|
||||
|
||||
m_messenger.Init();
|
||||
|
||||
@ -3629,7 +3629,7 @@ index 6061909..af6175e 100644
|
||||
|
||||
CUtil::ClearTempFonts();
|
||||
}
|
||||
@@ -2710,7 +2710,7 @@ bool CDVDPlayer::OpenAudioStream(int iStream, int source)
|
||||
@@ -2884,7 +2884,7 @@ bool CDVDPlayer::OpenAudioStream(int iStream, int source)
|
||||
m_dvdPlayerAudio.SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
|
||||
|
||||
/* audio normally won't consume full cpu, so let it have prio */
|
||||
@ -3638,7 +3638,7 @@ index 6061909..af6175e 100644
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -2772,11 +2772,11 @@ bool CDVDPlayer::OpenVideoStream(int iStream, int source)
|
||||
@@ -2946,11 +2946,11 @@ bool CDVDPlayer::OpenVideoStream(int iStream, int source)
|
||||
// the CoreAudio audio device handler thread. We do the same for
|
||||
// the DVDPlayerVideo thread so it can run to sleep without getting
|
||||
// swapped out by a busy OS.
|
||||
@ -5226,11 +5226,23 @@ index e61aa23..1ea4b9c 100644
|
||||
{
|
||||
//save current thread priority and set thread priority to THREAD_PRIORITY_TIME_CRITICAL
|
||||
int priority = GetThreadPriority(GetCurrentThread());
|
||||
diff --git a/xbmc/settings/AdvancedSettings.h b/xbmc/settings/AdvancedSettings.h
|
||||
index 927341b..a2f3f5a 100644
|
||||
--- a/xbmc/settings/AdvancedSettings.h
|
||||
+++ b/xbmc/settings/AdvancedSettings.h
|
||||
@@ -34,6 +34,7 @@ struct DatabaseSettings
|
||||
CStdString user;
|
||||
CStdString pass;
|
||||
CStdString name;
|
||||
+ DatabaseSettings() : type(""), host(""), port(""), user(""), pass(""), name("") {;};
|
||||
};
|
||||
|
||||
struct TVShowRegexp
|
||||
diff --git a/xbmc/settings/GUISettings.cpp b/xbmc/settings/GUISettings.cpp
|
||||
index b87ab67..3084ae9 100644
|
||||
index a36ef58..4f1e329 100644
|
||||
--- a/xbmc/settings/GUISettings.cpp
|
||||
+++ b/xbmc/settings/GUISettings.cpp
|
||||
@@ -587,6 +587,10 @@ void CGUISettings::Initialize()
|
||||
@@ -592,6 +592,10 @@ void CGUISettings::Initialize()
|
||||
#ifdef HAVE_LIBVA
|
||||
AddBool(vp, "videoplayer.usevaapi", 13426, true);
|
||||
#endif
|
||||
@ -5242,10 +5254,10 @@ index b87ab67..3084ae9 100644
|
||||
AddBool(g_sysinfo.IsVistaOrHigher() ? vp: NULL, "videoplayer.usedxva2", 13427, false);
|
||||
#endif
|
||||
diff --git a/xbmc/settings/GUIWindowSettingsCategory.cpp b/xbmc/settings/GUIWindowSettingsCategory.cpp
|
||||
index d262f50..fb40609 100644
|
||||
index 596967c..15db1bc 100644
|
||||
--- a/xbmc/settings/GUIWindowSettingsCategory.cpp
|
||||
+++ b/xbmc/settings/GUIWindowSettingsCategory.cpp
|
||||
@@ -931,6 +931,15 @@ void CGUIWindowSettingsCategory::UpdateSettings()
|
||||
@@ -946,6 +946,15 @@ void CGUIWindowSettingsCategory::UpdateSettings()
|
||||
pControl->SetEnabled(enabled);
|
||||
}
|
||||
}
|
||||
@ -6924,165 +6936,25 @@ index 56856ac..8aa7da9 100644
|
||||
{
|
||||
m_hwnd = NULL;
|
||||
m_hProcess = NULL;
|
||||
diff --git a/xbmc/windowing/X11/WinSystemX11.cpp b/xbmc/windowing/X11/WinSystemX11.cpp
|
||||
index 62cf554..eb02e9a 100644
|
||||
--- a/xbmc/windowing/X11/WinSystemX11.cpp
|
||||
+++ b/xbmc/windowing/X11/WinSystemX11.cpp
|
||||
@@ -139,8 +139,14 @@ bool CWinSystemX11::CreateNewWindow(const CStdString& name, bool fullScreen, RES
|
||||
// register XRandR Events
|
||||
#if defined(HAS_XRANDR)
|
||||
int iReturn;
|
||||
+#if defined(HAS_SDL)
|
||||
+ m_info.info.x11.lock_func();
|
||||
+#endif
|
||||
XRRQueryExtension(m_dpy, &m_RREventBase, &iReturn);
|
||||
XRRSelectInput(m_dpy, m_wmWindow, RRScreenChangeNotifyMask);
|
||||
+#if defined(HAS_SDL)
|
||||
+ m_info.info.x11.unlock_func();
|
||||
+#endif
|
||||
#endif
|
||||
diff --git a/xbmc/windowing/WinEventsSDL.cpp b/xbmc/windowing/WinEventsSDL.cpp
|
||||
index afff390..2e8b869 100644
|
||||
--- a/xbmc/windowing/WinEventsSDL.cpp
|
||||
+++ b/xbmc/windowing/WinEventsSDL.cpp
|
||||
@@ -216,8 +216,16 @@ bool CWinEventsSDL::MessagePump()
|
||||
SDL_Event event;
|
||||
bool ret = false;
|
||||
|
||||
m_bWindowCreated = true;
|
||||
@@ -190,7 +196,12 @@ bool CWinSystemX11::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
|
||||
mode.h = res.iHeight;
|
||||
mode.hz = res.fRefreshRate;
|
||||
mode.id = res.strId;
|
||||
-
|
||||
+
|
||||
+#if defined(HAS_SDL)
|
||||
+ if (m_SDLSurface)
|
||||
+ m_info.info.x11.lock_func();
|
||||
+#endif
|
||||
+
|
||||
if(m_bFullScreen)
|
||||
- while (SDL_PollEvent(&event))
|
||||
+ while (1)
|
||||
{
|
||||
OnLostDevice();
|
||||
@@ -198,6 +209,11 @@ bool CWinSystemX11::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl
|
||||
}
|
||||
else
|
||||
g_xrandr.RestoreState();
|
||||
+
|
||||
+#if defined(HAS_SDL)
|
||||
+ if (m_SDLSurface)
|
||||
+ m_info.info.x11.unlock_func();
|
||||
+ {
|
||||
+#if defined(HAS_GLX)
|
||||
+ CSingleLock lock(g_graphicsContext);
|
||||
+#endif
|
||||
#endif
|
||||
|
||||
int options = SDL_OPENGL;
|
||||
@@ -316,30 +332,33 @@ bool CWinSystemX11::IsSuitableVisual(XVisualInfo *vInfo)
|
||||
bool CWinSystemX11::RefreshGlxContext()
|
||||
{
|
||||
bool retVal = false;
|
||||
- SDL_SysWMinfo info;
|
||||
- SDL_VERSION(&info.version);
|
||||
- if (SDL_GetWMInfo(&info) <= 0)
|
||||
+ SDL_VERSION(&m_info.version);
|
||||
+ if (SDL_GetWMInfo(&m_info) <= 0)
|
||||
{
|
||||
CLog::Log(LOGERROR, "Failed to get window manager info from SDL");
|
||||
return false;
|
||||
}
|
||||
|
||||
- if(m_glWindow == info.info.x11.window && m_glContext)
|
||||
+ if(m_glWindow == m_info.info.x11.window && m_glContext)
|
||||
{
|
||||
CLog::Log(LOGERROR, "GLX: Same window as before, refreshing context");
|
||||
+ m_info.info.x11.lock_func();
|
||||
glXMakeCurrent(m_dpy, None, NULL);
|
||||
glXMakeCurrent(m_dpy, m_glWindow, m_glContext);
|
||||
+ m_info.info.x11.unlock_func();
|
||||
return true;
|
||||
}
|
||||
|
||||
+ m_info.info.x11.lock_func();
|
||||
+ if (!SDL_PollEvent(&event))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
XVisualInfo vMask;
|
||||
XVisualInfo *visuals;
|
||||
XVisualInfo *vInfo = NULL;
|
||||
int availableVisuals = 0;
|
||||
vMask.screen = DefaultScreen(m_dpy);
|
||||
XWindowAttributes winAttr;
|
||||
- m_glWindow = info.info.x11.window;
|
||||
- m_wmWindow = info.info.x11.wmwindow;
|
||||
+ m_glWindow = m_info.info.x11.window;
|
||||
+ m_wmWindow = m_info.info.x11.wmwindow;
|
||||
|
||||
/* Assume a depth of 24 in case the below calls to XGetWindowAttributes()
|
||||
or XGetVisualInfo() fail. That shouldn't happen unless something is
|
||||
@@ -405,6 +424,8 @@ bool CWinSystemX11::RefreshGlxContext()
|
||||
else
|
||||
CLog::Log(LOGERROR, "GLX Error: vInfo is NULL!");
|
||||
|
||||
+ m_info.info.x11.unlock_func();
|
||||
+
|
||||
return retVal;
|
||||
}
|
||||
|
||||
@@ -471,6 +492,7 @@ void CWinSystemX11::CheckDisplayEvents()
|
||||
bool bGotEvent(false);
|
||||
bool bTimeout(false);
|
||||
XEvent Event;
|
||||
+
|
||||
while (XCheckTypedEvent(m_dpy, m_RREventBase + RRScreenChangeNotify, &Event))
|
||||
{
|
||||
if (Event.type == m_RREventBase + RRScreenChangeNotify)
|
||||
@@ -501,6 +523,7 @@ void CWinSystemX11::CheckDisplayEvents()
|
||||
// reset fail safe timer
|
||||
m_dpyLostTime = 0;
|
||||
}
|
||||
+
|
||||
#endif
|
||||
}
|
||||
|
||||
diff --git a/xbmc/windowing/X11/WinSystemX11.h b/xbmc/windowing/X11/WinSystemX11.h
|
||||
index 5b941be..4f1f2ae 100644
|
||||
--- a/xbmc/windowing/X11/WinSystemX11.h
|
||||
+++ b/xbmc/windowing/X11/WinSystemX11.h
|
||||
@@ -28,6 +28,10 @@
|
||||
#include <GL/glx.h>
|
||||
#include "threads/CriticalSection.h"
|
||||
|
||||
+#ifdef HAS_SDL
|
||||
+#include <SDL/SDL_syswm.h>
|
||||
+#endif
|
||||
+
|
||||
class IDispResource;
|
||||
|
||||
class CWinSystemX11 : public CWinSystemBase
|
||||
@@ -66,7 +70,10 @@ protected:
|
||||
void CheckDisplayEvents();
|
||||
void OnLostDevice();
|
||||
|
||||
+#ifdef HAS_SDL
|
||||
SDL_Surface* m_SDLSurface;
|
||||
+ SDL_SysWMinfo m_info;
|
||||
+#endif
|
||||
GLXContext m_glContext;
|
||||
GLXWindow m_glWindow;
|
||||
Window m_wmWindow;
|
||||
diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp
|
||||
index ec02b10..1a10104 100644
|
||||
--- a/xbmc/windowing/X11/WinSystemX11GL.cpp
|
||||
+++ b/xbmc/windowing/X11/WinSystemX11GL.cpp
|
||||
@@ -43,6 +43,10 @@ CWinSystemX11GL::~CWinSystemX11GL()
|
||||
|
||||
bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty)
|
||||
{
|
||||
+#if defined(HAS_SDL)
|
||||
+ m_info.info.x11.lock_func();
|
||||
+#endif
|
||||
+
|
||||
CheckDisplayEvents();
|
||||
|
||||
if(m_iVSyncMode == 3)
|
||||
@@ -119,6 +123,10 @@ bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty)
|
||||
else
|
||||
glXSwapBuffers(m_dpy, m_glWindow);
|
||||
|
||||
+#if defined(HAS_SDL)
|
||||
+ m_info.info.x11.unlock_func();
|
||||
+#endif
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
||||
switch(event.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
|
Loading…
x
Reference in New Issue
Block a user