diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-810-include_system.h.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-810-include_system.h.patch deleted file mode 100644 index ba183709bc..0000000000 --- a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-810-include_system.h.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -Naur xbmc-f3b0020/xbmc/peripherals/Peripherals.cpp xbmc-f3b0020.patch/xbmc/peripherals/Peripherals.cpp ---- xbmc-f3b0020/xbmc/peripherals/Peripherals.cpp 2011-12-10 22:16:17.000000000 +0100 -+++ xbmc-f3b0020.patch/xbmc/peripherals/Peripherals.cpp 2011-12-11 18:25:13.143643374 +0100 -@@ -19,6 +19,7 @@ - * - */ - -+#include "system.h" - #include "Peripherals.h" - #include "bus/PeripheralBus.h" - #include "devices/PeripheralBluetooth.h" diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-901-xvba_support-e8d631f741bc32f75374a698b9a39b387c9aa0ab.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-901-xvba_support-43e6ecf2662cb218717c3015676538f0702337d5.patch similarity index 98% rename from packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-901-xvba_support-e8d631f741bc32f75374a698b9a39b387c9aa0ab.patch rename to packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-901-xvba_support-43e6ecf2662cb218717c3015676538f0702337d5.patch index 0629cb582c..b7b09e11da 100644 --- a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-901-xvba_support-e8d631f741bc32f75374a698b9a39b387c9aa0ab.patch +++ b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-d967ec3-901-xvba_support-43e6ecf2662cb218717c3015676538f0702337d5.patch @@ -93,7 +93,7 @@ index e7045ba..e495665 100755 --enable-pthreads \ --enable-runtime-cpudetect \ diff --git a/language/English/strings.xml b/language/English/strings.xml -index 1b2afe5..7b1b58d 100644 +index 090a1b9..c7de09b 100644 --- a/language/English/strings.xml +++ b/language/English/strings.xml @@ -1232,6 +1232,8 @@ @@ -1034,7 +1034,7 @@ index f0b4aeb..47d25e4 100644 m_paused = false; m_clock = 0; diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -index 4961b7d..d6972ab 100644 +index 4961b7d..1c01ff0 100644 --- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp @@ -60,6 +60,9 @@ @@ -1057,7 +1057,15 @@ index 4961b7d..d6972ab 100644 } CLinuxRendererGL::YUVBUFFER::~YUVBUFFER() -@@ -223,7 +229,7 @@ bool CLinuxRendererGL::ValidateRenderer() +@@ -159,6 +165,7 @@ CLinuxRendererGL::CLinuxRendererGL() + m_rgbPbo = 0; + + m_dllSwScale = new DllSwScale; ++ m_bValidated = false; + } + + CLinuxRendererGL::~CLinuxRendererGL() +@@ -223,7 +230,7 @@ bool CLinuxRendererGL::ValidateRenderer() void CLinuxRendererGL::ManageTextures() { @@ -1066,7 +1074,15 @@ index 4961b7d..d6972ab 100644 //m_iYV12RenderBuffer = 0; return; } -@@ -568,6 +574,11 @@ void CLinuxRendererGL::Flush() +@@ -273,6 +280,7 @@ bool CLinuxRendererGL::Configure(unsigned int width, unsigned int height, unsign + + // Ensure that textures are recreated and rendering starts only after the 1st + // frame is loaded after every call to Configure(). ++ Flush(); + m_bValidated = false; + + for (int i = 0 ; iCompileAndLink()) -@@ -897,6 +909,11 @@ void CLinuxRendererGL::LoadShaders(int field) +@@ -897,6 +911,11 @@ void CLinuxRendererGL::LoadShaders(int field) CLog::Log(LOGNOTICE, "GL: Using VAAPI render method"); m_renderMethod = RENDER_VAAPI; } @@ -1118,7 +1134,7 @@ index 4961b7d..d6972ab 100644 else { int requestedMethod = g_guiSettings.GetInt("videoplayer.rendermethod"); -@@ -1031,6 +1048,18 @@ void CLinuxRendererGL::LoadShaders(int field) +@@ -1031,6 +1050,18 @@ void CLinuxRendererGL::LoadShaders(int field) m_textureCreate = &CLinuxRendererGL::CreateVAAPITexture; m_textureDelete = &CLinuxRendererGL::DeleteVAAPITexture; } @@ -1137,7 +1153,7 @@ index 4961b7d..d6972ab 100644 else { // setup default YV12 texture handlers -@@ -1124,6 +1153,13 @@ void CLinuxRendererGL::Render(DWORD flags, int renderBuffer) +@@ -1124,6 +1155,13 @@ void CLinuxRendererGL::Render(DWORD flags, int renderBuffer) RenderVDPAU(renderBuffer, m_currentField); } #endif @@ -1151,7 +1167,7 @@ index 4961b7d..d6972ab 100644 #ifdef HAVE_LIBVA else if (m_renderMethod & RENDER_VAAPI) { -@@ -1597,6 +1633,77 @@ void CLinuxRendererGL::RenderVAAPI(int index, int field) +@@ -1597,6 +1635,77 @@ void CLinuxRendererGL::RenderVAAPI(int index, int field) #endif } @@ -1202,10 +1218,10 @@ index 4961b7d..d6972ab 100644 + glBegin(GL_QUADS); + if (m_textureTarget==GL_TEXTURE_2D) + { -+ glTexCoord2f(0.0, 0.0); glVertex2f(m_destRect.x1, m_destRect.y1); -+ glTexCoord2f(1.0, 0.0); glVertex2f(m_destRect.x2, m_destRect.y1); -+ glTexCoord2f(1.0, 1.0); glVertex2f(m_destRect.x2, m_destRect.y2); -+ glTexCoord2f(0.0, 1.0); glVertex2f(m_destRect.x1, m_destRect.y2); ++ glTexCoord2f(plane.rect.x1, plane.rect.y1); glVertex2f(m_destRect.x1, m_destRect.y1); ++ glTexCoord2f(plane.rect.x2, plane.rect.y1); glVertex2f(m_destRect.x2, m_destRect.y1); ++ glTexCoord2f(plane.rect.x2, plane.rect.y2); glVertex2f(m_destRect.x2, m_destRect.y2); ++ glTexCoord2f(plane.rect.x1, plane.rect.y2); glVertex2f(m_destRect.x1, m_destRect.y2); + } + else + { @@ -1229,7 +1245,7 @@ index 4961b7d..d6972ab 100644 void CLinuxRendererGL::RenderSoftware(int index, int field) { YUVPLANES &planes = m_buffers[index].fields[field]; -@@ -2351,6 +2458,367 @@ void CLinuxRendererGL::UploadVAAPITexture(int index) +@@ -2351,6 +2460,375 @@ void CLinuxRendererGL::UploadVAAPITexture(int index) #endif } @@ -1257,7 +1273,8 @@ index 4961b7d..d6972ab 100644 +#ifdef HAVE_LIBXVBA + YV12Image &im = m_buffers[index].image; + YUVFIELDS &fields = m_buffers[index].fields; -+ YUVPLANE &plane = fields[0][1]; ++ YUVPLANE &plane = fields[0][0]; ++ YUVPLANE &planeFallback = fields[0][1]; + + DeleteXVBATexture(index); + @@ -1272,8 +1289,8 @@ index 4961b7d..d6972ab 100644 + plane.pixpertex_x = 1; + plane.pixpertex_y = 1; + -+ glGenTextures(1, &plane.id); -+ fields[0][0].id = plane.id; ++ glGenTextures(1, &planeFallback.id); ++ plane.id = planeFallback.id; + + m_eventTexturesDone[index]->Set(); +#endif @@ -1309,6 +1326,13 @@ index 4961b7d..d6972ab 100644 + if (xvba->UploadTexture(index, field, m_textureTarget) == 1) + fields[m_currentField][0].id = xvba->GetTexture(index, field); + ++ CRect crop = xvba->GetCropRect(); ++ m_sourceRect.x1 += crop.x1; ++ m_sourceRect.x2 -= m_sourceWidth - crop.x2; ++ m_sourceRect.y1 += crop.y1; ++ m_sourceRect.y2 -= m_sourceHeight - crop.y2; ++ CalculateTextureSourceRects(index, 1); ++ + glDisable(m_textureTarget); + + m_eventTexturesDone[index]->Set(); @@ -1597,7 +1621,7 @@ index 4961b7d..d6972ab 100644 void CLinuxRendererGL::UploadYUV422PackedTexture(int source) { YUVBUFFER& buf = m_buffers[source]; -@@ -2934,6 +3402,9 @@ bool CLinuxRendererGL::Supports(ERENDERFEATURE feature) +@@ -2934,6 +3412,9 @@ bool CLinuxRendererGL::Supports(ERENDERFEATURE feature) if (m_renderMethod & RENDER_VAAPI) return false; @@ -1607,7 +1631,7 @@ index 4961b7d..d6972ab 100644 return (m_renderMethod & RENDER_GLSL) || (m_renderMethod & RENDER_ARB) || ((m_renderMethod & RENDER_SW) && glewIsSupported("GL_ARB_imaging") == GL_TRUE); -@@ -2947,6 +3418,9 @@ bool CLinuxRendererGL::Supports(ERENDERFEATURE feature) +@@ -2947,6 +3428,9 @@ bool CLinuxRendererGL::Supports(ERENDERFEATURE feature) if (m_renderMethod & RENDER_VAAPI) return false; @@ -1617,7 +1641,7 @@ index 4961b7d..d6972ab 100644 return (m_renderMethod & RENDER_GLSL) || (m_renderMethod & RENDER_ARB) || ((m_renderMethod & RENDER_SW) && glewIsSupported("GL_ARB_imaging") == GL_TRUE); -@@ -2970,7 +3444,8 @@ bool CLinuxRendererGL::Supports(ERENDERFEATURE feature) +@@ -2970,7 +3454,8 @@ bool CLinuxRendererGL::Supports(ERENDERFEATURE feature) if (feature == RENDERFEATURE_NONLINSTRETCH) { if (((m_renderMethod & RENDER_GLSL) && !(m_renderMethod & RENDER_POT)) || @@ -1627,7 +1651,7 @@ index 4961b7d..d6972ab 100644 return true; } -@@ -3010,10 +3485,22 @@ bool CLinuxRendererGL::Supports(EINTERLACEMETHOD method) +@@ -3010,10 +3495,22 @@ bool CLinuxRendererGL::Supports(EINTERLACEMETHOD method) if(m_renderMethod & RENDER_VAAPI) return false; @@ -1654,7 +1678,7 @@ index 4961b7d..d6972ab 100644 if((method == VS_INTERLACEMETHOD_RENDER_BLEND || method == VS_INTERLACEMETHOD_RENDER_WEAVE_INVERTED -@@ -3045,7 +3532,7 @@ bool CLinuxRendererGL::Supports(ESCALINGMETHOD method) +@@ -3045,7 +3542,7 @@ bool CLinuxRendererGL::Supports(ESCALINGMETHOD method) || method == VS_SCALINGMETHOD_LANCZOS3) { if ((glewIsSupported("GL_EXT_framebuffer_object") && (m_renderMethod & RENDER_GLSL)) || @@ -1663,7 +1687,7 @@ index 4961b7d..d6972ab 100644 { // spline36 and lanczos3 are only allowed through advancedsettings.xml if(method != VS_SCALINGMETHOD_SPLINE36 -@@ -3104,7 +3591,7 @@ void CLinuxRendererGL::UnBindPbo(YUVBUFFER& buff) +@@ -3104,7 +3601,7 @@ void CLinuxRendererGL::UnBindPbo(YUVBUFFER& buff) pbo = true; glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, buff.pbo[plane]); @@ -1672,7 +1696,7 @@ index 4961b7d..d6972ab 100644 buff.image.plane[plane] = (BYTE*)glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB) + PBO_OFFSET; } if(pbo) -@@ -3128,4 +3615,13 @@ void CLinuxRendererGL::AddProcessor(VAAPI::CHolder& holder) +@@ -3128,4 +3625,13 @@ void CLinuxRendererGL::AddProcessor(VAAPI::CHolder& holder) } #endif @@ -1939,10 +1963,10 @@ index 1dce256..8b7d5fb 100644 diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp new file mode 100644 -index 0000000..fd7e934 +index 0000000..a64ee7c --- /dev/null +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.cpp -@@ -0,0 +1,1311 @@ +@@ -0,0 +1,1339 @@ +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org @@ -2465,7 +2489,7 @@ index 0000000..fd7e934 + state = m_displayState; + } + } -+ if (state == XVBA_RESET) ++ if (state == XVBA_RESET || state == XVBA_ERROR) + { + CLog::Log(LOGNOTICE,"XVBA::Check - Attempting recovery"); + @@ -2476,7 +2500,10 @@ index 0000000..fd7e934 + ResetState(); + CXVBAContext::EnsureContext(&m_context); + -+ return VC_FLUSHED; ++ if (state == XVBA_RESET) ++ return VC_FLUSHED; ++ else ++ return VC_ERROR; + } + return 0; +} @@ -2485,7 +2512,7 @@ index 0000000..fd7e934 +{ + CLog::Log(LOGERROR, "XVBA::%s - %s, line %d", function, msg, line); + CExclusiveLock lock(m_displaySection); -+ m_displayState = XVBA_LOST; ++ m_displayState = XVBA_ERROR; +} + +bool CDecoder::CreateSession(AVCodecContext* avctx) @@ -2493,6 +2520,9 @@ index 0000000..fd7e934 + m_surfaceWidth = (avctx->coded_width+15) & ~15; + m_surfaceHeight = (avctx->coded_height+15) & ~15; + ++ m_vidWidth = avctx->width; ++ m_vidHeight = avctx->height; ++ + XVBA_Create_Decode_Session_Input sessionInput; + XVBA_Create_Decode_Session_Output sessionOutput; + @@ -2770,6 +2800,15 @@ index 0000000..fd7e934 + memcpy((uint8_t*)xvba->m_xvbaBufferPool.data_buffer->bufferXVBA+location+3, + &sdf, 1); + } ++ // check for potential buffer overwrite ++ unsigned int bytesToCopy = render->buffers[j].size; ++ unsigned int freeBufferSize = xvba->m_xvbaBufferPool.data_buffer->buffer_size - ++ xvba->m_xvbaBufferPool.data_buffer->data_size_in_buffer; ++ if (bytesToCopy >= freeBufferSize) ++ { ++ xvba->SetError(__FUNCTION__, "bitstream buffer too large, maybe corrupted packet", __LINE__); ++ return; ++ } + memcpy((uint8_t*)xvba->m_xvbaBufferPool.data_buffer->bufferXVBA+location+startCodeSize, + render->buffers[j].buffer, + render->buffers[j].size); @@ -2845,6 +2884,16 @@ index 0000000..fd7e934 + CDecoder* xvba = (CDecoder*)ctx->GetHardware(); + struct pictureAge* pA = &xvba->picAge; + ++ pic->data[0] = ++ pic->data[1] = ++ pic->data[2] = ++ pic->data[3] = 0; ++ ++ pic->linesize[0] = ++ pic->linesize[1] = ++ pic->linesize[2] = ++ pic->linesize[3] = 0; ++ + CSharedLock lock(xvba->m_decoderSection); + + { CSharedLock dLock(xvba->m_displaySection); @@ -2900,20 +2949,13 @@ index 0000000..fd7e934 + render->picture_descriptor = (XVBAPictureDescriptor *)xvba->m_xvbaBufferPool.picture_descriptor_buffer->bufferXVBA; + render->iq_matrix = (XVBAQuantMatrixAvc *)xvba->m_xvbaBufferPool.iq_matrix_buffer->bufferXVBA; + xvba->m_videoSurfaces.push_back(render); ++ CLog::Log(LOGDEBUG, "XVBA::FFGetBuffer - created video surface"); + } + + if (render == NULL) + return -1; + + pic->data[0] = (uint8_t*)render; -+ pic->data[1] = -+ pic->data[2] = -+ pic->data[3] = 0; -+ -+ pic->linesize[0] = -+ pic->linesize[1] = -+ pic->linesize[2] = -+ pic->linesize[3] = 0; + + if(pic->reference) + { @@ -3217,6 +3259,16 @@ index 0000000..fd7e934 + return m_flipBuffer[index].glTexture[field]; +} + ++CRect CDecoder::GetCropRect() ++{ ++ CRect crop; ++ crop.x1 = 0; ++ crop.y1 = 0; ++ crop.x2 = m_vidWidth; ++ crop.y2 = m_vidHeight; ++ return crop; ++} ++ +void CDecoder::FinishGL() +{ + CLog::Log(LOGNOTICE, "XVBA::FinishGL - clearing down gl resources"); @@ -3244,7 +3296,7 @@ index 0000000..fd7e934 + glDeleteTextures(1, &m_flipBuffer[i].glTexture[j]); + m_flipBuffer[i].glTexture[j] = 0; + } -+ if (m_flipBuffer[i].glSurface[j]) ++ if (m_flipBuffer[i].glSurface[j] && m_xvbaSession) + { + g_XVBA_vtable.DestroySurface(m_flipBuffer[i].glSurface[j]); + m_flipBuffer[i].glSurface[j] = 0; @@ -3256,10 +3308,10 @@ index 0000000..fd7e934 +#endif diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.h new file mode 100644 -index 0000000..f5c8a32 +index 0000000..8dfc1c2 --- /dev/null +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/XVBA.h -@@ -0,0 +1,153 @@ +@@ -0,0 +1,157 @@ +/* + * Copyright (C) 2005-2011 Team XBMC + * http://www.xbmc.org @@ -3290,6 +3342,7 @@ index 0000000..f5c8a32 +#include "threads/SharedSection.h" +#include "threads/Event.h" +#include "guilib/DispResource.h" ++#include "guilib/Geometry.h" +#include "libavcodec/xvba.h" +#include +#include @@ -3309,6 +3362,7 @@ index 0000000..f5c8a32 +{ XVBA_OPEN +, XVBA_RESET +, XVBA_LOST ++, XVBA_ERROR +}; + +class CXVBAContext @@ -3352,6 +3406,7 @@ index 0000000..f5c8a32 + void CopyYV12(uint8_t *dest); + int UploadTexture(int index, XVBA_SURFACE_FLAG field, GLenum textureTarget); + GLuint GetTexture(int index, XVBA_SURFACE_FLAG field); ++ CRect GetCropRect(); + void FinishGL(); + +protected: @@ -3376,6 +3431,7 @@ index 0000000..f5c8a32 + EDisplayState m_displayState; + + unsigned int m_surfaceWidth, m_surfaceHeight; ++ unsigned int m_vidWidth, m_vidHeight; + unsigned int m_numRenderBuffers; + + XVBADecodeCap m_decoderCap; @@ -3703,7 +3759,7 @@ index 695cb7e..4c99c48 100644 if(m_bAllowFullscreen) diff --git a/xbmc/cores/paplayer/PAPlayer.cpp b/xbmc/cores/paplayer/PAPlayer.cpp -index 28a7c58..27c8930 100644 +index 43b57d3..13f5238 100644 --- a/xbmc/cores/paplayer/PAPlayer.cpp +++ b/xbmc/cores/paplayer/PAPlayer.cpp @@ -52,7 +52,7 @@ @@ -5200,6 +5256,18 @@ index cb08d1b..cf5f927 100644 Create(); } +diff --git a/xbmc/peripherals/Peripherals.cpp b/xbmc/peripherals/Peripherals.cpp +index 3866165..8be05a3 100644 +--- a/xbmc/peripherals/Peripherals.cpp ++++ b/xbmc/peripherals/Peripherals.cpp +@@ -19,6 +19,7 @@ + * + */ + ++#include "system.h" + #include "Peripherals.h" + #include "bus/PeripheralBus.h" + #include "devices/PeripheralBluetooth.h" diff --git a/xbmc/pictures/GUIWindowSlideShow.cpp b/xbmc/pictures/GUIWindowSlideShow.cpp index ffe47a5..a7b54d2 100644 --- a/xbmc/pictures/GUIWindowSlideShow.cpp @@ -5226,18 +5294,6 @@ 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 a36ef58..4f1e329 100644 --- a/xbmc/settings/GUISettings.cpp