xbmc-pvr: update XVBA patches

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2011-12-13 14:06:26 +01:00
parent 8d361b078d
commit 91befb2e8e

View File

@ -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: