From 10cad8e04029e21c342b8431d855100c0eafbea8 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Mon, 9 Dec 2013 18:55:30 +0200 Subject: [PATCH] xbmc: update to xbmc-13.alpha-15bb590 --- .../mediacenter/xbmc-theme-Confluence/meta | 2 +- packages/mediacenter/xbmc/package.mk | 2 +- ...tegrate-VPP-into-existing-vaapi-code.patch | 52 +- ...e-that-the-decoder-is-init-once-only.patch | 29 - ...mc-995.01-fernetmenta-fixes-9e4195a.patch} | 2024 ++++++++++------- .../xbmc/patches/xbmc-999.03-PR3794.patch | 131 ++ 6 files changed, 1334 insertions(+), 906 deletions(-) delete mode 100644 packages/mediacenter/xbmc/patches/xbmc-991.03-Revert-Ensure-that-the-decoder-is-init-once-only.patch rename packages/mediacenter/xbmc/patches/{xbmc-995.01-fernetmenta-fixes-d1d476c.patch => xbmc-995.01-fernetmenta-fixes-9e4195a.patch} (88%) create mode 100644 packages/mediacenter/xbmc/patches/xbmc-999.03-PR3794.patch diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index b7dfdbe9a5..2fdb11d529 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc-theme-Confluence" -PKG_VERSION="13.alpha-d68300f" +PKG_VERSION="13.alpha-15bb590" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/package.mk b/packages/mediacenter/xbmc/package.mk index 14554c11dd..f606d1d2d2 100644 --- a/packages/mediacenter/xbmc/package.mk +++ b/packages/mediacenter/xbmc/package.mk @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc" -PKG_VERSION="13.alpha-d68300f" +PKG_VERSION="13.alpha-15bb590" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/patches/xbmc-991.02-VAAPI-Integrate-VPP-into-existing-vaapi-code.patch b/packages/mediacenter/xbmc/patches/xbmc-991.02-VAAPI-Integrate-VPP-into-existing-vaapi-code.patch index b1f722c80d..4271b2458d 100644 --- a/packages/mediacenter/xbmc/patches/xbmc-991.02-VAAPI-Integrate-VPP-into-existing-vaapi-code.patch +++ b/packages/mediacenter/xbmc/patches/xbmc-991.02-VAAPI-Integrate-VPP-into-existing-vaapi-code.patch @@ -1,7 +1,7 @@ -From 7e27055debe5e9851e6a9b8707253a4b5c926a28 Mon Sep 17 00:00:00 2001 +From 0de5c323cee26d565fcd84eda803d3c92b4e6b37 Mon Sep 17 00:00:00 2001 From: BtbN Date: Thu, 3 Oct 2013 14:49:38 +0200 -Subject: [PATCH 2/2] VAAPI: Integrate VPP into existing vaapi code +Subject: [PATCH] VAAPI: Integrate VPP into existing vaapi code --- language/English/strings.po | 27 +- @@ -15,48 +15,48 @@ Subject: [PATCH 2/2] VAAPI: Integrate VPP into existing vaapi code 8 files changed, 513 insertions(+), 40 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index 15cee63..4495364 100755 +index bab2c12..ea38e13 100755 --- a/language/English/strings.po +++ b/language/English/strings.po -@@ -7129,7 +7129,32 @@ msgctxt "#16325" - msgid "VDPAU - Bob" +@@ -7150,7 +7150,32 @@ msgctxt "#16326" + msgid "DXVA-HD" msgstr "" --#empty strings from id 16326 to 16399 +-#empty strings from id 16327 to 16399 +#: xbmc/video/dialogs/GUIDialogVideoSettings.cpp -+msgctxt "#16326" ++msgctxt "#16327" +msgid "VAAPI Auto" +msgstr "" + +#: xbmc/video/dialogs/GUIDialogVideoSettings.cpp -+msgctxt "#16327" ++msgctxt "#16328" +msgid "VAAPI Weave" +msgstr "" + +#: xbmc/video/dialogs/GUIDialogVideoSettings.cpp -+msgctxt "#16328" ++msgctxt "#16329" +msgid "VAAPI Bob" +msgstr "" + +#: xbmc/video/dialogs/GUIDialogVideoSettings.cpp -+msgctxt "#16329" ++msgctxt "#16330" +msgid "VAAPI Motion Adaptive" +msgstr "" + +#: xbmc/video/dialogs/GUIDialogVideoSettings.cpp -+msgctxt "#16330" ++msgctxt "#16331" +msgid "VAAPI Motion Compensated" +msgstr "" + -+#empty strings from id 16331 to 16399 ++#empty strings from id 16332 to 16399 #: xbmc/video/dialogs/GUIDialogVideoSettings.cpp msgctxt "#16400" diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -index 600ffa7..375af79 100644 +index aa52f72..c4a7455 100644 --- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -@@ -3480,6 +3480,26 @@ bool CLinuxRendererGL::Supports(EINTERLACEMETHOD method) +@@ -3488,6 +3488,26 @@ bool CLinuxRendererGL::Supports(EINTERLACEMETHOD method) if(m_renderMethod & RENDER_VAAPI) { #ifdef HAVE_LIBVA @@ -83,7 +83,7 @@ index 600ffa7..375af79 100644 VAAPI::CDisplayPtr disp = m_buffers[m_iYV12RenderBuffer].vaapi.display; if(disp) { -@@ -3567,6 +3587,14 @@ EINTERLACEMETHOD CLinuxRendererGL::AutoInterlaceMethod() +@@ -3575,6 +3595,14 @@ EINTERLACEMETHOD CLinuxRendererGL::AutoInterlaceMethod() if(m_renderMethod & RENDER_VDPAU) return VS_INTERLACEMETHOD_NONE; @@ -132,7 +132,7 @@ index 3facfce..e7304e0 100644 return display; } -@@ -151,6 +154,9 @@ CSurfaceGL::~CSurfaceGL() +@@ -151,6 +154,9 @@ static CDisplayPtr GetGlobalDisplay() CDecoder::CDecoder() { @@ -728,7 +728,7 @@ index a520e42..684b8d0 100644 class CDecoder : public CDVDVideoCodecFFmpeg::IHardwareDecoder { -@@ -113,22 +174,26 @@ public: +@@ -113,22 +174,26 @@ class CDecoder virtual int Decode (AVCodecContext* avctx, AVFrame* frame); virtual bool GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture); virtual int Check (AVCodecContext* avctx); @@ -756,7 +756,7 @@ index a520e42..684b8d0 100644 int m_refs; std::list m_surfaces_used; std::list m_surfaces_free; -@@ -139,7 +204,23 @@ protected: +@@ -139,7 +204,23 @@ class CDecoder vaapi_context *m_hwaccel; @@ -781,7 +781,7 @@ index a520e42..684b8d0 100644 } + diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp -index 614e869..3667806 100644 +index 79ce315..414f6dc 100644 --- a/xbmc/settings/AdvancedSettings.cpp +++ b/xbmc/settings/AdvancedSettings.cpp @@ -167,6 +167,7 @@ void CAdvancedSettings::Initialize() @@ -830,21 +830,21 @@ index 293f363..199290f 100644 }; diff --git a/xbmc/video/dialogs/GUIDialogVideoSettings.cpp b/xbmc/video/dialogs/GUIDialogVideoSettings.cpp -index 5218a83..6eca774 100644 +index 5218a83..3fe91d8 100644 --- a/xbmc/video/dialogs/GUIDialogVideoSettings.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoSettings.cpp @@ -116,6 +116,11 @@ void CGUIDialogVideoSettings::CreateSettings() entries.push_back(make_pair(VS_INTERLACEMETHOD_DXVA_BOB , 16320)); entries.push_back(make_pair(VS_INTERLACEMETHOD_DXVA_BEST , 16321)); entries.push_back(make_pair(VS_INTERLACEMETHOD_AUTO_ION , 16325)); -+ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_AUTO , 16326)); -+ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_WEAVE , 16327)); -+ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_BOB , 16328)); -+ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_MOTION_ADAPTIVE , 16329)); -+ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_MOTION_COMPENSATED , 16330)); ++ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_AUTO , 16327)); ++ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_WEAVE , 16328)); ++ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_BOB , 16329)); ++ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_MOTION_ADAPTIVE , 16330)); ++ entries.push_back(make_pair(VS_INTERLACEMETHOD_VAAPI_MOTION_COMPENSATED , 16331)); /* remove unsupported methods */ for(vector >::iterator it = entries.begin(); it != entries.end();) -- -1.8.3.2 +1.8.5.1 diff --git a/packages/mediacenter/xbmc/patches/xbmc-991.03-Revert-Ensure-that-the-decoder-is-init-once-only.patch b/packages/mediacenter/xbmc/patches/xbmc-991.03-Revert-Ensure-that-the-decoder-is-init-once-only.patch deleted file mode 100644 index 1740d88048..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-991.03-Revert-Ensure-that-the-decoder-is-init-once-only.patch +++ /dev/null @@ -1,29 +0,0 @@ -From d6a8898b3bffd0960806eed84efe0ce438ba7b84 Mon Sep 17 00:00:00 2001 -From: fritsch -Date: Mon, 2 Dec 2013 19:00:44 +0100 -Subject: [PATCH] Revert "Ensure that the decoder is init once only." - -This reverts commit 6d637d4801095acfe5b6a7e56f446aa2e4602bfa. ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -index 09551c4..5692faf 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -@@ -107,11 +107,6 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx - if(*cur == PIX_FMT_VAAPI_VLD && CSettings::Get().GetBool("videoplayer.usevaapi") - && (avctx->codec_id != AV_CODEC_ID_MPEG4 || g_advancedSettings.m_videoAllowMpeg4VAAPI)) - { -- if (ctx->GetHardware() != NULL) -- { -- ctx->SetHardware(NULL); -- } -- - VAAPI::CDecoder* dec = new VAAPI::CDecoder(); - if(dec->Open(avctx, *cur, ctx->m_uSurfacesCount)) - { --- -1.8.3.2 - diff --git a/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-d1d476c.patch b/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-9e4195a.patch similarity index 88% rename from packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-d1d476c.patch rename to packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-9e4195a.patch index 63e06fd9b9..5bcc7fcefc 100644 --- a/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-d1d476c.patch +++ b/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta-fixes-9e4195a.patch @@ -1,7 +1,7 @@ -From 02ee7945225a0f5730301c07f7df2bcdb92ecb6f Mon Sep 17 00:00:00 2001 +From 925d09812a8c3303e38c0fdefd15363cba8b2be7 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:34:39 +0200 -Subject: [PATCH 01/90] videoplayer: adapt lateness detection and dropping to +Subject: [PATCH 01/93] videoplayer: adapt lateness detection and dropping to buffering --- @@ -157,10 +157,10 @@ index b78f779..794ddb6 100644 + virtual void SetCodecControl(int flags) {} }; diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -index 09551c4..ebf7a11 100644 +index 5692faf..d830a4c 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -@@ -168,6 +168,7 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx +@@ -163,6 +163,7 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx m_iLastKeyframe = 0; m_dts = DVD_NOPTS_VALUE; m_started = false; @@ -168,7 +168,7 @@ index 09551c4..ebf7a11 100644 } CDVDVideoCodecFFmpeg::~CDVDVideoCodecFFmpeg() -@@ -359,6 +360,14 @@ void CDVDVideoCodecFFmpeg::SetDropState(bool bDrop) +@@ -354,6 +355,14 @@ void CDVDVideoCodecFFmpeg::SetDropState(bool bDrop) { if( m_pCodecContext ) { @@ -183,7 +183,7 @@ index 09551c4..ebf7a11 100644 // i don't know exactly how high this should be set // couldn't find any good docs on it. think it varies // from codec to codec on what it does -@@ -560,6 +569,7 @@ int CDVDVideoCodecFFmpeg::Decode(uint8_t* pData, int iSize, double dts, double p +@@ -555,6 +564,7 @@ int CDVDVideoCodecFFmpeg::Decode(uint8_t* pData, int iSize, double dts, double p void CDVDVideoCodecFFmpeg::Reset() { m_started = false; @@ -191,7 +191,7 @@ index 09551c4..ebf7a11 100644 m_iLastKeyframe = m_pCodecContext->has_b_frames; m_dllAvCodec.avcodec_flush_buffers(m_pCodecContext); -@@ -669,6 +679,22 @@ bool CDVDVideoCodecFFmpeg::GetPictureCommon(DVDVideoPicture* pDvdVideoPicture) +@@ -664,6 +674,22 @@ bool CDVDVideoCodecFFmpeg::GetPictureCommon(DVDVideoPicture* pDvdVideoPicture) else pDvdVideoPicture->pts = DVD_NOPTS_VALUE; @@ -214,7 +214,7 @@ index 09551c4..ebf7a11 100644 if(!m_started) pDvdVideoPicture->iFlags |= DVP_FLAG_DROPPED; -@@ -928,3 +954,8 @@ unsigned CDVDVideoCodecFFmpeg::GetAllowedReferences() +@@ -923,3 +949,8 @@ unsigned CDVDVideoCodecFFmpeg::GetAllowedReferences() else return 0; } @@ -579,13 +579,13 @@ index f8ad541..186e271 100644 }; -- -1.8.5-rc3 +1.8.5.1 -From 9ff1c13c5615091643445383aa4a7974426dc73e Mon Sep 17 00:00:00 2001 +From 05ee985eedc249c93ce799d6a9f1974d59fa6e9b Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Sep 2012 16:05:21 +0200 -Subject: [PATCH 02/90] video player: present correct pts to user for a/v sync +Subject: [PATCH 02/93] video player: present correct pts to user for a/v sync (after buffering in renderer) --- @@ -650,13 +650,13 @@ index 186e271..59c7f09 100644 double GetOutputDelay(); /* returns the expected delay, from that a packet is put in queue */ -- -1.8.5-rc3 +1.8.5.1 -From 1632723c006f975fdb8e77fffaa48b532a23511e Mon Sep 17 00:00:00 2001 +From b71bbbc5e86d78097c0e78529bf6c4bba8d002bb Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 16 Feb 2013 18:25:53 +0100 -Subject: [PATCH 03/90] videoplayer: some rework and documentation +Subject: [PATCH 03/93] videoplayer: some rework and documentation --- .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 29 ++++++++++++++++++++-- @@ -716,10 +716,10 @@ index 794ddb6..c9f9c98 100644 virtual void SetCodecControl(int flags) {} }; diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -index ebf7a11..59f7562 100644 +index d830a4c..43d3e70 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp -@@ -955,6 +955,17 @@ unsigned CDVDVideoCodecFFmpeg::GetAllowedReferences() +@@ -950,6 +950,17 @@ unsigned CDVDVideoCodecFFmpeg::GetAllowedReferences() return 0; } @@ -764,20 +764,20 @@ index 587ea4b..27a61bd 100644 if (iDecoderPts == DVD_NOPTS_VALUE) iDecoderPts = pts; -- -1.8.5-rc3 +1.8.5.1 -From b3d062e38abfcd2ec006e600f41bcb459b55d292 Mon Sep 17 00:00:00 2001 +From 06bdde14f53ad5266bf3d5c82c06ab3b43dcaa54 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 1 Jun 2013 11:21:19 +0200 -Subject: [PATCH 04/90] renderer: bump buffers to 5 +Subject: [PATCH 04/93] renderer: bump buffers to 5 --- xbmc/cores/VideoRenderers/BaseRenderer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbmc/cores/VideoRenderers/BaseRenderer.h b/xbmc/cores/VideoRenderers/BaseRenderer.h -index a61d3cf..df5fe0e 100644 +index 5a21fec..c131dd1 100644 --- a/xbmc/cores/VideoRenderers/BaseRenderer.h +++ b/xbmc/cores/VideoRenderers/BaseRenderer.h @@ -29,7 +29,7 @@ @@ -790,13 +790,13 @@ index a61d3cf..df5fe0e 100644 class CSetting; -- -1.8.5-rc3 +1.8.5.1 -From 23aed0761ce62cf5915eeac91d1721f8d02cf6e7 Mon Sep 17 00:00:00 2001 +From b89f4540b4730d36b948354ee97c0888bbf0372e Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:41:31 +0200 -Subject: [PATCH 05/90] videoplayer: update frametime, it might change due to +Subject: [PATCH 05/93] videoplayer: update frametime, it might change due to fps detection --- @@ -817,13 +817,13 @@ index 27a61bd..8e772e3 100644 { m_codecname = m_pVideoCodec->GetName(); -- -1.8.5-rc3 +1.8.5.1 -From 398b699209de762868d42cff36c10946c1e56d4d Mon Sep 17 00:00:00 2001 +From 376bd22742ddecf97304da022167cb2d95f2e12b Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:43:06 +0200 -Subject: [PATCH 06/90] videoplayer: give streams with invalid fps a chance for +Subject: [PATCH 06/93] videoplayer: give streams with invalid fps a chance for fps detection --- @@ -844,13 +844,13 @@ index 8e772e3..150a796 100644 //reset the stored framerates if no good framerate was detected m_fStableFrameRate = 0.0; -- -1.8.5-rc3 +1.8.5.1 -From c1aceb43f084a6abcdc0eeb5654a803a11f2a17f Mon Sep 17 00:00:00 2001 +From c98179fad9c107b9df5a33e28693dd88b13c13ff Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:49:05 +0200 -Subject: [PATCH 07/90] dvdplayer: allow rewinding at end of stream, do a seek +Subject: [PATCH 07/93] dvdplayer: allow rewinding at end of stream, do a seek after rewind --- @@ -884,13 +884,13 @@ index f9375c6..915c2d7 100644 // audioplayer, stops outputing audio to audiorendere, but still tries to // sleep an correct amount for each packet -- -1.8.5-rc3 +1.8.5.1 -From 1af884a726a2b18b9fcc85b7f8d045ef8db6663b Mon Sep 17 00:00:00 2001 +From bfebc1e1806ca97848aa82984d6f1abab8bb6c7c Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:22:05 +0200 -Subject: [PATCH 08/90] X11: ditch SDL for video and window events +Subject: [PATCH 08/93] X11: ditch SDL for video and window events --- xbmc/Application.cpp | 2 +- @@ -906,7 +906,7 @@ Subject: [PATCH 08/90] X11: ditch SDL for video and window events create mode 100644 xbmc/windowing/WinEventsX11.h diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp -index 8e7f7a3..3e94344 100644 +index 08bfba0..ffb90dc 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -857,7 +857,7 @@ bool CApplication::CreateGUI() @@ -2424,13 +2424,13 @@ index b1464d0..34b912f 100644 CCriticalSection m_resourceSection; std::vector m_resources; -- -1.8.5-rc3 +1.8.5.1 -From 5dc636d3fadbf5c9c79e4028b63f24119436e42e Mon Sep 17 00:00:00 2001 +From 83ee4307f7e363a413c7820434f1f28a3b3c734e Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:24:22 +0200 -Subject: [PATCH 09/90] X11: Add xbmc icon +Subject: [PATCH 09/93] X11: Add xbmc icon --- xbmc/windowing/X11/WinSystemX11.cpp | 126 +++++++++++++++++++++++++++++++++++- @@ -2617,13 +2617,13 @@ index 34b912f..352e90e 100644 CStopWatch m_screensaverReset; }; -- -1.8.5-rc3 +1.8.5.1 -From 34742eb90be31f538d3cf27ec6a25cc443210c25 Mon Sep 17 00:00:00 2001 +From 5d0b6ffeee3b9746ddb1a5aa0c79a525a9334d37 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 14:11:26 +0200 -Subject: [PATCH 10/90] X11: add SDL joystick until we have a better solution +Subject: [PATCH 10/93] X11: add SDL joystick until we have a better solution --- xbmc/windowing/WinEventsX11.cpp | 26 ++++++++++++++++++++++++++ @@ -2674,13 +2674,13 @@ index ad58aad..6f57a87 100644 } -- -1.8.5-rc3 +1.8.5.1 -From 80d3cd59352981fa61d0bef732730416edf6e4d1 Mon Sep 17 00:00:00 2001 +From 32424259449e821f259bfe974c722168dc05e68d Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 12:35:55 +0200 -Subject: [PATCH 11/90] X11: factor out code handling device reset notification +Subject: [PATCH 11/93] X11: factor out code handling device reset notification --- xbmc/windowing/X11/WinSystemX11.cpp | 22 ++++++++++++++-------- @@ -2740,13 +2740,13 @@ index 352e90e..3f91b9b 100644 protected: bool RefreshGlxContext(); -- -1.8.5-rc3 +1.8.5.1 -From db6552395dbe35b1f36886850dad6339ac8b618f Mon Sep 17 00:00:00 2001 +From eac701b19b2c21cfe2903a8b32dc11b6b03ad03e Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 15:02:00 +0200 -Subject: [PATCH 12/90] X11: move xrandr events to WinEventsX11 +Subject: [PATCH 12/93] X11: move xrandr events to WinEventsX11 --- xbmc/windowing/WinEventsX11.cpp | 42 +++++++++++++++++++++++++++++++++++++ @@ -2887,13 +2887,13 @@ index 304dac8..16b13aa 100644 void CWinSystemX11::Register(IDispResource *resource) -- -1.8.5-rc3 +1.8.5.1 -From 02a661833701f9e8d010411eb5e70ca2954efeb6 Mon Sep 17 00:00:00 2001 +From 15f9fc37725a53a2bcc156b748504febfd04bf92 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 12 Apr 2012 15:43:56 +0200 -Subject: [PATCH 13/90] xrandr: remove method RestoreState +Subject: [PATCH 13/93] xrandr: remove method RestoreState --- xbmc/windowing/X11/WinSystemX11.cpp | 13 +++++++++++-- @@ -2969,13 +2969,13 @@ index 0aec487..00b49dc 100644 //bool Has1080p(); //bool Has720p(); -- -1.8.5-rc3 +1.8.5.1 -From 411863464fb196eaec7eda4d3cecd724208c9b33 Mon Sep 17 00:00:00 2001 +From 751f51877e00d05cfdd13107e79c6ee11cc7d577 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 20 May 2012 13:17:10 +0200 -Subject: [PATCH 14/90] xrandr: observe orientation +Subject: [PATCH 14/93] xrandr: observe orientation --- xbmc/windowing/X11/WinSystemX11.cpp | 89 ++++++++++++++++++++++++++++++------- @@ -3187,13 +3187,13 @@ index 00b49dc..508604d 100644 class CXRandR -- -1.8.5-rc3 +1.8.5.1 -From 880a9a8caf7b0356ca546c7c2b50624bca090190 Mon Sep 17 00:00:00 2001 +From 295a8899bb0e02db0da0528fe6e63347d94e5fdf Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:54:15 +0200 -Subject: [PATCH 15/90] xrandr: allow getting info for multiple screen's +Subject: [PATCH 15/93] xrandr: allow getting info for multiple screen's Refactored by: Joakim Plate --- @@ -3365,13 +3365,13 @@ index 508604d..d37838a 100644 extern CXRandR g_xrandr; -- -1.8.5-rc3 +1.8.5.1 -From 03a0d9603ef91758d83c3a785db87a049f64b67e Mon Sep 17 00:00:00 2001 +From 9303c15f14342f6900b096d03829f9e97b95ac75 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:44:00 +0200 -Subject: [PATCH 16/90] X11: fix multi-head setups +Subject: [PATCH 16/93] X11: fix multi-head setups --- language/English/strings.po | 4 +- @@ -3386,7 +3386,7 @@ Subject: [PATCH 16/90] X11: fix multi-head setups 9 files changed, 227 insertions(+), 113 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index 0cb5e05..c15c99a 100755 +index bab2c12..253f9d1 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -1019,7 +1019,9 @@ msgctxt "#245" @@ -3401,7 +3401,7 @@ index 0cb5e05..c15c99a 100755 msgctxt "#247" msgid "Scripts" diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 4b69b38..1b0cd6f 100644 +index 1a3aca4..e826418 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2037,6 +2037,15 @@ @@ -3555,7 +3555,7 @@ index 8ee1be2..bead24b 100644 protected: CDisplaySettings(); diff --git a/xbmc/settings/Settings.cpp b/xbmc/settings/Settings.cpp -index 9c1c1db..bc41b95 100644 +index 4917ceb..17fb36f 100644 --- a/xbmc/settings/Settings.cpp +++ b/xbmc/settings/Settings.cpp @@ -406,6 +406,7 @@ void CSettings::Uninitialize() @@ -4127,13 +4127,13 @@ index 4175aab..94584ab 100644 private: bool IsSuitableVisual(XVisualInfo *vInfo); -- -1.8.5-rc3 +1.8.5.1 -From 4dd92eda0a8f7bab0fa59a9ba1898a586f9bf514 Mon Sep 17 00:00:00 2001 +From e2ad2b915ed3f72c3ab76f608d0ae1e8e53bdae1 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:36:32 +0200 -Subject: [PATCH 17/90] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 17/93] X11: remove all DefaultScreen and RootWindow macros --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -4198,13 +4198,13 @@ index 6383754..21e7dc5 100644 CLog::Log(LOGDEBUG, "GLX_EXTENSIONS:%s", m_glxext.c_str()); -- -1.8.5-rc3 +1.8.5.1 -From a28d04910aae35201682e32ee30ce6af3af9128d Mon Sep 17 00:00:00 2001 +From 83a9a4ecb67ad3dfa1c1c5c4da9b729315abcf0b Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 11:45:22 +0200 -Subject: [PATCH 18/90] X11: remove all DefaultScreen and RootWindow macros +Subject: [PATCH 18/93] X11: remove all DefaultScreen and RootWindow macros (VideoRefClock) Note this is on a separate display connection. @@ -4273,13 +4273,13 @@ index 0b3950a..ca43b5a 100644 XRRFreeScreenConfigInfo(CurrInfo); -- -1.8.5-rc3 +1.8.5.1 -From 312ae052309392c8c1088aa3701489bb4a5e2fa2 Mon Sep 17 00:00:00 2001 +From 8717775f9981cdaca1be7b5012bab55bdc05090e Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 20 Jun 2012 17:37:11 +0200 -Subject: [PATCH 19/90] X11: recreate gl context after output has changed +Subject: [PATCH 19/93] X11: recreate gl context after output has changed --- xbmc/windowing/X11/WinSystemX11.cpp | 24 ++++++++++++++---------- @@ -4427,13 +4427,13 @@ index 21e7dc5..8e68d5d 100644 } -- -1.8.5-rc3 +1.8.5.1 -From 032fd56a253ca87e74e935bd427802f2efebbefa Mon Sep 17 00:00:00 2001 +From 4c245692b50baf7afe3d436e748cfd42f32eb5b0 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:06:25 +0200 -Subject: [PATCH 20/90] X11: hook video reference clock in windowing +Subject: [PATCH 20/93] X11: hook video reference clock in windowing --- xbmc/video/VideoReferenceClock.cpp | 71 +++++++++++++++++++++++++++----------- @@ -4635,13 +4635,13 @@ index dd65a1b..afd71fc 100644 bool m_UseNvSettings; bool m_bIsATI; -- -1.8.5-rc3 +1.8.5.1 -From 8338153a5662ebeeafeb9816ca957bd8ee34eaf4 Mon Sep 17 00:00:00 2001 +From 1f2ab47decb9d1b3d2552a1d71b28d7c6421520d Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 21 Jun 2012 17:26:51 +0200 -Subject: [PATCH 21/90] X11: fix video calibrations +Subject: [PATCH 21/93] X11: fix video calibrations --- xbmc/windowing/WinSystem.h | 1 + @@ -4730,13 +4730,13 @@ index 9666cc3..5b52d6c 100644 // Local to WinSystemX11 only Display* GetDisplay() { return m_dpy; } -- -1.8.5-rc3 +1.8.5.1 -From 5e62a94661dde5e1c08a50ef2448e0358912fcce Mon Sep 17 00:00:00 2001 +From dd1b917d6e7ca76d09e8b0b8eb635a68c0563848 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:00:26 +0200 -Subject: [PATCH 22/90] X11: deactivate screen saver on startup +Subject: [PATCH 22/93] X11: deactivate screen saver on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 29 +++++++++++++++++++++++++++++ @@ -4803,13 +4803,13 @@ index 5b52d6c..b2bd5a0 100644 virtual void NotifyAppActiveChange(bool bActivated); virtual void NotifyAppFocusChange(bool bGaining); -- -1.8.5-rc3 +1.8.5.1 -From 03e1884a687087c18520f74a4c8cf525cf1f028b Mon Sep 17 00:00:00 2001 +From 6598e86c089efb321d2801d9f55a41edde913b31 Mon Sep 17 00:00:00 2001 From: FernetMenta Date: Thu, 5 Jul 2012 12:10:09 +0200 -Subject: [PATCH 23/90] X11: change method of going full-screen +Subject: [PATCH 23/93] X11: change method of going full-screen --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -4850,13 +4850,13 @@ index b76b229..869baa8 100644 Pixmap bitmapNoData; XColor black; -- -1.8.5-rc3 +1.8.5.1 -From e40e1c0d43a2adb052463cf19ef21bd44b4a100f Mon Sep 17 00:00:00 2001 +From 6d639b9b09f502a015b4cf67980614bd20d17864 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Jun 2012 19:12:39 +0200 -Subject: [PATCH 24/90] X11: reset key repeat and key modifier on focus lost +Subject: [PATCH 24/93] X11: reset key repeat and key modifier on focus lost and gain --- @@ -4885,13 +4885,13 @@ index d98f12f..743aca9 100644 serial = xevent.xfocus.serial; break; -- -1.8.5-rc3 +1.8.5.1 -From b2e82e18bc33d8165ece21d4301eda0086f480a7 Mon Sep 17 00:00:00 2001 +From a5f254229a83c528e85ff411652d452eecf13629 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:18:46 +0200 -Subject: [PATCH 25/90] X11: replace custom utf8 to unicode with charset +Subject: [PATCH 25/93] X11: replace custom utf8 to unicode with charset convertor (squash to x11 events) --- @@ -5105,13 +5105,13 @@ index a412f32..9a8a912 100644 XIC m_xic; XBMC_Event m_lastKey; -- -1.8.5-rc3 +1.8.5.1 -From 014f4f370f8ac781b6d1c389095cb89cedb87717 Mon Sep 17 00:00:00 2001 +From d09866aecc5150d8bbb574e437d052dfdcbaabc5 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 5 Jul 2012 14:23:54 +0200 -Subject: [PATCH 26/90] X11: fixed invalid usage of sizeof() (squash into x11 +Subject: [PATCH 26/93] X11: fixed invalid usage of sizeof() (squash into x11 changes) --- @@ -5172,13 +5172,13 @@ index 9a8a912..c69169c 100644 XIC m_xic; XBMC_Event m_lastKey; -- -1.8.5-rc3 +1.8.5.1 -From e7a5305214988f6a2c9547cb6f01ed608ed96a94 Mon Sep 17 00:00:00 2001 +From e17099956b1da4c7025ab63efd0ff6e9d41bb7af Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 9 Jun 2012 18:23:53 +0200 -Subject: [PATCH 27/90] add missing keys to xbmc keytable +Subject: [PATCH 27/93] add missing keys to xbmc keytable --- xbmc/input/XBMC_keytable.cpp | 2 ++ @@ -5198,13 +5198,13 @@ index d57f4d3..b807897 100644 // Function keys , { XBMCK_F1, 0, 0, XBMCVK_F1, "f1"} -- -1.8.5-rc3 +1.8.5.1 -From 1c3df872518fca6780f550447fe9819204cf690d Mon Sep 17 00:00:00 2001 +From cf78167de3d99a89f516272ea1b1d4cf5344302c Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 16 Mar 2012 15:57:51 +0100 -Subject: [PATCH 28/90] videorefclock: temp deactivate of nv settings +Subject: [PATCH 28/93] videorefclock: temp deactivate of nv settings --- xbmc/video/VideoReferenceClock.cpp | 2 +- @@ -5224,13 +5224,13 @@ index 0ddf102..3ae7107 100644 #endif } -- -1.8.5-rc3 +1.8.5.1 -From fd1995bedb6bf8fc62f7d366e43d7c4adb7e64c9 Mon Sep 17 00:00:00 2001 +From 1e2e53bfa94acb36f5460c1ed5f357112889d260 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 09:09:09 +0200 -Subject: [PATCH 29/90] videorefclock: ask graphics context for refresh rate +Subject: [PATCH 29/93] videorefclock: ask graphics context for refresh rate --- xbmc/video/VideoReferenceClock.cpp | 3 ++- @@ -5258,13 +5258,13 @@ index 3ae7107..27bebde 100644 CLog::Log(LOGDEBUG, "CVideoReferenceClock: Detected refreshrate: %i hertz", (int)m_RefreshRate); -- -1.8.5-rc3 +1.8.5.1 -From 7f732eae6353dee625bffdcfa0afd84f725895ce Mon Sep 17 00:00:00 2001 +From f30f6587fb6f2ce5a3d32892107d4839d9af3f36 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 9 Jul 2012 14:00:18 +0200 -Subject: [PATCH 30/90] X11: fix icon texture after +Subject: [PATCH 30/93] X11: fix icon texture after cc5ed3c2474084ebc0373a3046410e6f766e03f4 --- @@ -5369,13 +5369,13 @@ index 869baa8..bfe3797 100644 } -- -1.8.5-rc3 +1.8.5.1 -From 38043decd386c1dd6ecda624b0fc13b705881b6c Mon Sep 17 00:00:00 2001 +From 2eb1f5a42c5cebc6987cac25de795fe4b9417c3d Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 10 Jul 2012 11:14:12 +0200 -Subject: [PATCH 31/90] X11: check for window manager +Subject: [PATCH 31/93] X11: check for window manager --- xbmc/windowing/X11/WinSystemX11.cpp | 74 ++++++++++++++++++++++++++++++++++++- @@ -5493,13 +5493,13 @@ index b2bd5a0..3e62cd8 100644 CStopWatch m_screensaverReset; }; -- -1.8.5-rc3 +1.8.5.1 -From 771fddfaea61727fcd219602a2c5c1ad09e9ad3c Mon Sep 17 00:00:00 2001 +From 054421424abd7dc17bc993c291810f035e9a8298 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 12 Jul 2012 11:11:47 +0200 -Subject: [PATCH 32/90] X11: dont set window on xrandr if no mode available +Subject: [PATCH 32/93] X11: dont set window on xrandr if no mode available --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++----- @@ -5533,13 +5533,13 @@ index af82061..4f33c68 100644 CStdString currentOutput = CSettings::Get().GetString("videoscreen.monitor"); -- -1.8.5-rc3 +1.8.5.1 -From 80de5e314dafd55f65101647ce67183eb1a2730a Mon Sep 17 00:00:00 2001 +From 8e4b70349443aa7c14cf9b0786ca913c1c70a972 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 26 Jul 2012 09:34:28 +0200 -Subject: [PATCH 33/90] X11: fix crash after a resolution change on startup +Subject: [PATCH 33/93] X11: fix crash after a resolution change on startup --- xbmc/windowing/X11/WinSystemX11.cpp | 3 ++- @@ -5560,13 +5560,13 @@ index 4f33c68..bc4e963 100644 #endif -- -1.8.5-rc3 +1.8.5.1 -From 91735154efd22fbdefc202fc601dc5e76d7e7e68 Mon Sep 17 00:00:00 2001 +From 13de82289bfb2b5cf24065a51702f5c4a3d993fa Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 15 Sep 2012 18:27:29 +0200 -Subject: [PATCH 34/90] X11: lock graphics context in NotifyXRREvent +Subject: [PATCH 34/93] X11: lock graphics context in NotifyXRREvent --- xbmc/windowing/X11/WinSystemX11.cpp | 2 ++ @@ -5586,13 +5586,13 @@ index bc4e963..57a8d20 100644 { CLog::Log(LOGERROR, "WinSystemX11::RefreshWindow - failed to query xrandr"); -- -1.8.5-rc3 +1.8.5.1 -From 60e18fc3ff93f07f656864861917c96edf2436a5 Mon Sep 17 00:00:00 2001 +From 8e06b84f8bb6769742482d9bc6e884ba9ed326c4 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 23 Aug 2012 19:39:49 +0200 -Subject: [PATCH 35/90] ffmpeg: add av_find_default_stream_index to interface +Subject: [PATCH 35/93] ffmpeg: add av_find_default_stream_index to interface --- lib/DllAvFormat.h | 4 ++++ @@ -5635,13 +5635,13 @@ index 0016c0b..3514856 100644 /* dependencies of libavformat */ -- -1.8.5-rc3 +1.8.5.1 -From 57291b4c51c06486bff55d26f665b0e8e68a9826 Mon Sep 17 00:00:00 2001 +From f01dbcfe4cfa06a4abadb90cfd4935de5125f007 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 16:06:39 +0200 -Subject: [PATCH 36/90] dvdplayer: observe pts counter overflow +Subject: [PATCH 36/93] dvdplayer: observe pts counter overflow --- .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 198 ++++++++++++++++++++- @@ -5925,13 +5925,13 @@ index aef5ab1..35abbdf 100644 }; -- -1.8.5-rc3 +1.8.5.1 -From 3fd70c41f2f5c8bc31b8429c469f64d45e8e6b87 Mon Sep 17 00:00:00 2001 +From 45104d16c7d54bb029891618f96d944c2fe6f559 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 2 Oct 2012 13:02:10 +0200 -Subject: [PATCH 37/90] dvdplayer: avoid short screen flicker caused by +Subject: [PATCH 37/93] dvdplayer: avoid short screen flicker caused by unnecessary reconfigure of renderer --- @@ -5961,13 +5961,13 @@ index 150a796..beffbe9 100644 m_output.extended_format = pPicture->extended_format; m_output.color_matrix = pPicture->color_matrix; -- -1.8.5-rc3 +1.8.5.1 -From 7131874010724b166f8a4fbd2cc23c69caf195f8 Mon Sep 17 00:00:00 2001 +From 71f3cc7c934313c9864c3c87bdf12c756a848d64 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 11 Oct 2012 12:05:50 +0200 -Subject: [PATCH 38/90] vdpau: advanced settings for auto deinterlacing +Subject: [PATCH 38/93] vdpau: advanced settings for auto deinterlacing --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 8 ++++---- @@ -6030,13 +6030,13 @@ index 7d16957..bb70f3e 100644 bool m_videoVDPAUdeintSkipChromaHD; bool m_musicUseTimeSeeking; -- -1.8.5-rc3 +1.8.5.1 -From 57abb806fc84a277b78ad27f28d615f971e3cd85 Mon Sep 17 00:00:00 2001 +From 3e1dcac9988fbb9208d3c40412a068fade58950c Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 2 Nov 2012 13:20:03 +0100 -Subject: [PATCH 39/90] player: fix rewind +Subject: [PATCH 39/93] player: fix rewind --- xbmc/cores/dvdplayer/DVDMessage.h | 5 ++++- @@ -6248,13 +6248,13 @@ index 59c7f09..65dea76 100644 unsigned int m_dropRequests; }; -- -1.8.5-rc3 +1.8.5.1 -From ad46b010053d2e76d6454aadc5e499867f1ba41a Mon Sep 17 00:00:00 2001 +From 0c86847b82a9c824d8e0bdf3cb8a81c376dd5ec3 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 23 Nov 2012 17:41:12 +0100 -Subject: [PATCH 40/90] xrandr: fix query for multiple screens +Subject: [PATCH 40/93] xrandr: fix query for multiple screens --- xbmc/windowing/X11/XRandR.cpp | 10 ++++++---- @@ -6292,13 +6292,13 @@ index 4685413..e610150 100644 FILE* file = popen(cmd.c_str(),"r"); if (!file) -- -1.8.5-rc3 +1.8.5.1 -From 3eb00a00bbe84fbf4b46f0aa915c068cfd012ed7 Mon Sep 17 00:00:00 2001 +From 2862a2ba2f2412e0d107de824780294af5e37ed9 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Dec 2012 15:46:55 +0100 -Subject: [PATCH 41/90] X11: add debug log to print out refresh after xrr event +Subject: [PATCH 41/93] X11: add debug log to print out refresh after xrr event --- xbmc/windowing/X11/WinSystemX11.cpp | 6 ++++++ @@ -6322,13 +6322,13 @@ index 57a8d20..a237dc0 100644 unsigned int i; bool found(false); -- -1.8.5-rc3 +1.8.5.1 -From 761efd305aad2e6e47acf500f7d50602e5051d29 Mon Sep 17 00:00:00 2001 +From 6b2fdea3dfb8b579df6ce73b2bd99cebf9f01f13 Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 11 Dec 2012 11:08:13 +0100 -Subject: [PATCH 42/90] X11: dont call XCloseDisplay on shutdown, it crashes +Subject: [PATCH 42/93] X11: dont call XCloseDisplay on shutdown, it crashes when powered doen by cec on ATI --- @@ -6350,13 +6350,13 @@ index a237dc0..ab660b1 100644 // m_SDLSurface is free()'d by SDL_Quit(). -- -1.8.5-rc3 +1.8.5.1 -From 8e5c0e29a5b1a93daa123eade523d41c45e15a62 Mon Sep 17 00:00:00 2001 +From 03eb6918eeb07186e959c7404787422341d51dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Coutant?= Date: Wed, 12 Dec 2012 19:49:47 +0100 -Subject: [PATCH 43/90] x11: support for multiple x screens +Subject: [PATCH 43/93] x11: support for multiple x screens --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -6376,13 +6376,13 @@ index e610150..5c53574 100644 // TODO ERROR return false; -- -1.8.5-rc3 +1.8.5.1 -From 7fc173cdc970a1f568911279e1ea7715e7f4b4ea Mon Sep 17 00:00:00 2001 +From 8c5b62ed948d3fe53040c1362105a8e4fc68f724 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 24 Dec 2012 16:02:42 +0100 -Subject: [PATCH 44/90] pvr: increase changes counter of stream on stream +Subject: [PATCH 44/93] pvr: increase changes counter of stream on stream change, cosmetics after dd307930d39d92f145a01a16600cd00e01ec39be --- @@ -6413,13 +6413,13 @@ index b96d520..df89f6f 100644 else if (props.stream[i].iCodecType == XBMC_CODEC_TYPE_VIDEO) { -- -1.8.5-rc3 +1.8.5.1 -From 14d40ab01e496f089b34fb606f77fe0a973f21da Mon Sep 17 00:00:00 2001 +From ffc638b540bc7b33c63cbfb87c4adc1069ad5c68 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 17 Jan 2013 16:03:22 +0100 -Subject: [PATCH 45/90] X11: add keymapping for XF86XK_Sleep +Subject: [PATCH 45/93] X11: add keymapping for XF86XK_Sleep --- xbmc/windowing/WinEventsX11.cpp | 1 + @@ -6438,13 +6438,13 @@ index a62521f..263cb5a 100644 , {XK_Undo, XBMCK_UNDO} /* Media keys */ -- -1.8.5-rc3 +1.8.5.1 -From 50553a7075a5cbae23120a50d0a99b54eedea062 Mon Sep 17 00:00:00 2001 +From c5326ada9f69019530b419ed486a79bf0b8c4f6e Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 21 Jan 2013 09:00:19 +0100 -Subject: [PATCH 46/90] X11: remove toggle full screen after resume +Subject: [PATCH 46/93] X11: remove toggle full screen after resume --- xbmc/powermanagement/PowerManager.cpp | 5 ----- @@ -6467,13 +6467,13 @@ index 590a887..35b5a21 100644 } g_application.ResetScreenSaver(); -- -1.8.5-rc3 +1.8.5.1 -From 2c7ae5d9c7f7abd8ad6b2ec97834ec51af4d9c72 Mon Sep 17 00:00:00 2001 +From 40382651bea4c521c06b13c7b98426c4d96c4c07 Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:02 +0100 -Subject: [PATCH 47/90] xrandr: set screen on mode change command +Subject: [PATCH 47/93] xrandr: set screen on mode change command --- xbmc/windowing/X11/XRandR.cpp | 2 +- @@ -6493,13 +6493,13 @@ index 5c53574..4355ef7 100644 return false; CLog::Log(LOGINFO, "XRANDR: %s", cmd); -- -1.8.5-rc3 +1.8.5.1 -From ebb8987c9618827e0213b7171e55285f576fd82b Mon Sep 17 00:00:00 2001 +From 026a7f4cb2b4248cd2a2b6fc68c040d38f987c7c Mon Sep 17 00:00:00 2001 From: xbmc Date: Wed, 23 Jan 2013 17:03:39 +0100 -Subject: [PATCH 48/90] X11: recreate glx context when output changes +Subject: [PATCH 48/93] X11: recreate glx context when output changes --- xbmc/windowing/X11/WinSystemX11.cpp | 6 +++--- @@ -6547,13 +6547,13 @@ index 3e62cd8..2a1fb41 100644 void OnLostDevice(); bool SetWindow(int width, int height, bool fullscreen, const CStdString &output); -- -1.8.5-rc3 +1.8.5.1 -From 12fe11be65493c4760e76f13011bf5b998e237ce Mon Sep 17 00:00:00 2001 +From e2d8fa4daa56813ff05cc42d428c0670de570e68 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 14 Dec 2012 14:19:15 +0100 -Subject: [PATCH 49/90] pvr: do not show selection dialog for a single menu +Subject: [PATCH 49/93] pvr: do not show selection dialog for a single menu hook --- @@ -6561,10 +6561,10 @@ Subject: [PATCH 49/90] pvr: do not show selection dialog for a single menu 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xbmc/pvr/addons/PVRClients.cpp b/xbmc/pvr/addons/PVRClients.cpp -index 5b5706e..2eda43d 100644 +index 6560dfa..80106be 100644 --- a/xbmc/pvr/addons/PVRClients.cpp +++ b/xbmc/pvr/addons/PVRClients.cpp -@@ -729,6 +729,7 @@ void CPVRClients::ProcessMenuHooks(int iClientID, PVR_MENUHOOK_CAT cat, const CF +@@ -733,6 +733,7 @@ void CPVRClients::ProcessMenuHooks(int iClientID, PVR_MENUHOOK_CAT cat, const CF { hooks = client->GetMenuHooks(); std::vector hookIDs; @@ -6572,7 +6572,7 @@ index 5b5706e..2eda43d 100644 CGUIDialogSelect* pDialog = (CGUIDialogSelect*)g_windowManager.GetWindow(WINDOW_DIALOG_SELECT); pDialog->Reset(); -@@ -739,9 +740,11 @@ void CPVRClients::ProcessMenuHooks(int iClientID, PVR_MENUHOOK_CAT cat, const CF +@@ -743,9 +744,11 @@ void CPVRClients::ProcessMenuHooks(int iClientID, PVR_MENUHOOK_CAT cat, const CF pDialog->Add(client->GetString(hooks->at(i).iLocalizedStringId)); hookIDs.push_back(i); } @@ -6588,13 +6588,13 @@ index 5b5706e..2eda43d 100644 client->CallMenuHook(hooks->at(hookIDs.at(selection)), item); } -- -1.8.5-rc3 +1.8.5.1 -From ce5f374f647d65330eda73ee6525f9d531c136fd Mon Sep 17 00:00:00 2001 +From e20a8cdb28744afb12f225be6c6839fe777f6152 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 3 Feb 2013 08:17:16 +0100 -Subject: [PATCH 50/90] X11: use default screen parameters if no output +Subject: [PATCH 50/93] X11: use default screen parameters if no output connected --- @@ -6695,13 +6695,13 @@ index 4329a22..2adf8a0 100644 mask, &swa); -- -1.8.5-rc3 +1.8.5.1 -From 6cf2a802f1a3b605beaf7164094e82ec4a7dc407 Mon Sep 17 00:00:00 2001 +From 7f9cffd8ebd6b58529660f227d67c459e6bde728 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 23 Mar 2013 15:13:32 +0100 -Subject: [PATCH 51/90] X11: create parent window +Subject: [PATCH 51/93] X11: create parent window --- xbmc/windowing/X11/WinSystemX11.cpp | 69 +++++++++++++++++++++++-------------- @@ -6964,13 +6964,13 @@ index 2a1fb41..e8993f1 100644 Display* m_dpy; Cursor m_invisibleCursor; -- -1.8.5-rc3 +1.8.5.1 -From 10b52b7605b7b5b4f9d27dfa6de900851ea2b406 Mon Sep 17 00:00:00 2001 +From d083e76fc41c05963c9e5319531f4c0774666b86 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 12:30:12 +0100 -Subject: [PATCH 52/90] X11: use system key repeat rate instead of hardcoded +Subject: [PATCH 52/93] X11: use system key repeat rate instead of hardcoded one, taken from 58fd64b194e38b73b5f3132744bab35e994e7441 --- @@ -7169,13 +7169,13 @@ index c69169c..6429291 100644 int m_keymodState; bool m_structureChanged; -- -1.8.5-rc3 +1.8.5.1 -From 3974f91f4061196ed1b1c8f5e4cd207127e5711f Mon Sep 17 00:00:00 2001 +From c756681af847373917a5fc581a4718b49c4b6ff8 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 24 Mar 2013 16:04:48 +0100 -Subject: [PATCH 53/90] linux: use CLOCK_MONOTONIC_RAW as this is not subject +Subject: [PATCH 53/93] linux: use CLOCK_MONOTONIC_RAW as this is not subject to NTP --- @@ -7210,13 +7210,13 @@ index c06b8c5..4390d2e 100644 #endif } -- -1.8.5-rc3 +1.8.5.1 -From 584c7467346c578918abc253f06a14dbc8473db8 Mon Sep 17 00:00:00 2001 +From 37261a8c7b4e9258629cb60fa7c0478aa8f0d7df Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 15:18:53 +0100 -Subject: [PATCH 54/90] OMXPlayer: some caching fixes for pvr +Subject: [PATCH 54/93] OMXPlayer: some caching fixes for pvr --- xbmc/cores/omxplayer/OMXPlayer.cpp | 3 ++- @@ -7237,20 +7237,20 @@ index 5e77059..7d13609 100644 m_av_clock.OMXSetSpeed(speed); m_av_clock.OMXPause(); -- -1.8.5-rc3 +1.8.5.1 -From d6bdb12de8ce93c241ebc9e52d1be8c0841bd985 Mon Sep 17 00:00:00 2001 +From 2f53d8cd8d5e0a0519cae147a2c178c5a5b176c5 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 20:50:59 +0100 -Subject: [PATCH 55/90] fix incorrect display of fps when dr kicks in +Subject: [PATCH 55/93] fix incorrect display of fps when dr kicks in --- xbmc/Application.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp -index 3e94344..438fab0 100644 +index ffb90dc..1cea2da 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -2254,10 +2254,11 @@ void CApplication::Render() @@ -7267,13 +7267,13 @@ index 3e94344..438fab0 100644 g_renderManager.UpdateResolution(); -- -1.8.5-rc3 +1.8.5.1 -From aa7f8c0ec80ea5e54e4d81c83d127eda6da0d872 Mon Sep 17 00:00:00 2001 +From 5def7a37480d13577c13247fb4b9c995c43481ee Mon Sep 17 00:00:00 2001 From: xbmc Date: Sat, 13 Apr 2013 08:32:06 +0200 -Subject: [PATCH 56/90] X11: fix mouse coverage +Subject: [PATCH 56/93] X11: fix mouse coverage --- xbmc/windowing/X11/WinSystemX11.cpp | 11 ++++++++--- @@ -7336,13 +7336,13 @@ index e8993f1..5cccfb7 100644 CCriticalSection m_resourceSection; std::vector m_resources; -- -1.8.5-rc3 +1.8.5.1 -From 4090ad19f82a3c64eaf75a60b2efbc0269d33afc Mon Sep 17 00:00:00 2001 +From 0365e07d34dc57c884dead7cc5d6084203d4c46a Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 8 May 2013 13:14:58 +0200 -Subject: [PATCH 57/90] X11: fix incorrectly used screen num in desktop +Subject: [PATCH 57/93] X11: fix incorrectly used screen num in desktop resolution --- @@ -7374,13 +7374,13 @@ index 2acb36d..101ba98 100644 res.iHeight = mode.h; res.iScreenWidth = mode.w; -- -1.8.5-rc3 +1.8.5.1 -From 1751460b8c2c9cbaa97de3d3e6ec469538c90cdb Mon Sep 17 00:00:00 2001 +From 3a6092a59f18b082bb4d5350d37112c20e6f1a40 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 9 May 2013 12:07:09 +0200 -Subject: [PATCH 58/90] X11: do not overwrite user selected monitor with +Subject: [PATCH 58/93] X11: do not overwrite user selected monitor with fallback --- @@ -7502,13 +7502,13 @@ index 5cccfb7..1b658e2 100644 bool m_bIsInternalXrr; bool m_newGlContext; -- -1.8.5-rc3 +1.8.5.1 -From 735b995b76d781e57ad9d3a69f5b801ec658fa90 Mon Sep 17 00:00:00 2001 +From 841aa26f106c905fb114e416268db6e27ce00ead Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 12 May 2013 10:50:30 +0200 -Subject: [PATCH 59/90] xrandr: add turn on/off to wrapper +Subject: [PATCH 59/93] xrandr: add turn on/off to wrapper --- xbmc/windowing/X11/XRandR.cpp | 78 +++++++++++++++++++++++++++++++++++++++---- @@ -7671,13 +7671,13 @@ index d37838a..059062f 100644 //bool Has1080p(); //bool Has720p(); -- -1.8.5-rc3 +1.8.5.1 -From 793b13d0f6635efb6d19c0eb1b9a86d27299e61b Mon Sep 17 00:00:00 2001 +From ea5eb0aa3d15adc213ea18eb88a69f2fe56afa66 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 19 May 2013 12:55:35 +0200 -Subject: [PATCH 60/90] xrandr: add GetPreferredMode to wrapper +Subject: [PATCH 60/93] xrandr: add GetPreferredMode to wrapper --- xbmc/windowing/X11/XRandR.cpp | 23 +++++++++++++++++++++++ @@ -7731,13 +7731,13 @@ index 059062f..ab7cc63 100644 bool SetMode(XOutput output, XMode mode); void LoadCustomModeLinesToAllOutputs(void); -- -1.8.5-rc3 +1.8.5.1 -From e792c590d7f33ab6583319c83bd4ea42d32fe443 Mon Sep 17 00:00:00 2001 +From 32a5aeda8528669fd0a4aafb6b358fb5991243b3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 11 May 2013 17:12:12 +0200 -Subject: [PATCH 61/90] X11: multi-head improvement - poll for desired output +Subject: [PATCH 61/93] X11: multi-head improvement - poll for desired output if we do not get an xrr event --- @@ -7752,7 +7752,7 @@ Subject: [PATCH 61/90] X11: multi-head improvement - poll for desired output 8 files changed, 105 insertions(+), 12 deletions(-) diff --git a/language/English/strings.po b/language/English/strings.po -index c15c99a..92c7520 100755 +index 253f9d1..f9d427d 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -6464,7 +6464,7 @@ msgctxt "#14071" @@ -7779,7 +7779,7 @@ index c15c99a..92c7520 100755 #: xbmc/video/VideoDatabase.cpp msgctxt "#15012" diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 1b0cd6f..93eaa5c 100644 +index e826418..8eb7dbb 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2046,6 +2046,11 @@ @@ -8015,13 +8015,13 @@ index 62003f5..8525ede 100644 int status = system(cmd.c_str()); if (status == -1) -- -1.8.5-rc3 +1.8.5.1 -From 505a86ce601fd50c9dee79b125c398a10929987a Mon Sep 17 00:00:00 2001 +From b05344a5d380fb7c3c736a3ad4baafd414ce2ea6 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Wed, 15 May 2013 09:14:34 +0200 -Subject: [PATCH 62/90] X11: ignore mouse move event form other windows +Subject: [PATCH 62/93] X11: ignore mouse move event form other windows --- xbmc/windowing/WinEventsX11.cpp | 4 +++- @@ -8050,13 +8050,13 @@ index 908c8b6..938ad26 100644 memset(&newEvent, 0, sizeof(newEvent)); newEvent.type = XBMC_MOUSEMOTION; -- -1.8.5-rc3 +1.8.5.1 -From fb8c21ab620aacdfe355343395046a24ae3278b9 Mon Sep 17 00:00:00 2001 +From 678136b35b085bd0626b293c4f5924842f7804e3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 11 Jun 2013 16:20:29 +0200 -Subject: [PATCH 63/90] renderer: allow some lateness within vblank interval +Subject: [PATCH 63/93] renderer: allow some lateness within vblank interval --- xbmc/cores/VideoRenderers/RenderManager.cpp | 12 ++++++++++-- @@ -8113,13 +8113,13 @@ index 949c652b..d84ff6c 100644 OVERLAY::CRenderer m_overlays; -- -1.8.5-rc3 +1.8.5.1 -From 6034e09c098f5e392a3cab616ca541a36c9bf21f Mon Sep 17 00:00:00 2001 +From c0e45440a7c06ce5c73f22f4e04f85fde0e2af91 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 16 Jun 2013 13:22:58 +0200 -Subject: [PATCH 64/90] X11: another fix for mouse coverage +Subject: [PATCH 64/93] X11: another fix for mouse coverage --- xbmc/windowing/WinEventsX11.cpp | 6 ++++-- @@ -8149,13 +8149,13 @@ index 938ad26..e4ca56d 100644 break; } -- -1.8.5-rc3 +1.8.5.1 -From ae331cf317c4ebc66098ae928126d56f46a462a0 Mon Sep 17 00:00:00 2001 +From e5d665f7aec884f2bb846881193a49b3d4c137ce Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 5 Jul 2013 12:14:00 +0200 -Subject: [PATCH 65/90] X11: set windows class name +Subject: [PATCH 65/93] X11: set windows class name --- xbmc/windowing/X11/WinSystemX11.cpp | 9 ++++++++- @@ -8194,20 +8194,20 @@ index b3fe5102..df5fe9b 100644 // register interest in the delete window message -- -1.8.5-rc3 +1.8.5.1 -From caebbf4bd4d2f605be2015f9118523bcee3588b7 Mon Sep 17 00:00:00 2001 +From b0ad523fb64e0dbf34071450051de592a2653bab Mon Sep 17 00:00:00 2001 From: spiff Date: Tue, 16 Jul 2013 14:34:04 +0200 -Subject: [PATCH 66/90] fixed: typo +Subject: [PATCH 66/93] fixed: typo --- language/English/strings.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/English/strings.po b/language/English/strings.po -index 92c7520..f8ffbb7 100755 +index f9d427d..dc60c27 100755 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -6598,7 +6598,7 @@ msgstr "" @@ -8220,20 +8220,20 @@ index 92c7520..f8ffbb7 100755 #empty strings from id 14102 to 15011 -- -1.8.5-rc3 +1.8.5.1 -From 20a8eb1dd41c4c011c7d54bf71bccd884d25f8c2 Mon Sep 17 00:00:00 2001 +From 5a5649f4bcbe1d5b7ede8ddba40b616e131d40a7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 25 Jul 2013 17:18:13 +0200 -Subject: [PATCH 67/90] ActiveAE: slightly reduce buffer size +Subject: [PATCH 67/93] ActiveAE: slightly reduce buffer size --- xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp -index a3a6164..6443a2a 100644 +index c977c37..3928dac 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp @@ -30,8 +30,8 @@ @@ -8248,13 +8248,13 @@ index a3a6164..6443a2a 100644 void CEngineStats::Reset(unsigned int sampleRate) { -- -1.8.5-rc3 +1.8.5.1 -From ed9130e7d59052805354f0b3b3eedcc2244df56b Mon Sep 17 00:00:00 2001 +From 5b54e6fb133b2a7b0b2bed479e46163a0a367cce Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 4 Aug 2013 10:11:16 +0200 -Subject: [PATCH 68/90] Revert "vdpau: comment some features that will be added +Subject: [PATCH 68/93] Revert "vdpau: comment some features that will be added later" This reverts commit e00b4f65864d623ab4d2e9e5c06db138e661f1cf. @@ -8307,13 +8307,13 @@ index 57bb704..55f17e5 100644 m_mixersteps = 1; } -- -1.8.5-rc3 +1.8.5.1 -From 8c64fef920ba07765ebe6fcb6b3416bee0f133a4 Mon Sep 17 00:00:00 2001 +From 3b7b0dc5075e93c85ca37d3e4e9a789e907ad7c5 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:01:40 +0200 -Subject: [PATCH 69/90] X11: fix keysyms +Subject: [PATCH 69/93] X11: fix keysyms --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -8333,13 +8333,13 @@ index e4ca56d..b20130c 100644 newEvent.key.keysym.unicode = keys[keys.length() - 1]; newEvent.key.state = xevent.xkey.state; -- -1.8.5-rc3 +1.8.5.1 -From 088d985dda96da92d05e4b3363143340911ad477 Mon Sep 17 00:00:00 2001 +From eb23abb39807e6cb3a46ec1e901030296c6727de Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 9 Aug 2013 18:42:36 +0200 -Subject: [PATCH 70/90] X11: fix keysym for non-IM +Subject: [PATCH 70/93] X11: fix keysym for non-IM --- xbmc/windowing/WinEventsX11.cpp | 2 +- @@ -8359,13 +8359,13 @@ index b20130c..a38890c 100644 newEvent.key.keysym.scancode = xevent.xkey.keycode; newEvent.key.state = xevent.xkey.state; -- -1.8.5-rc3 +1.8.5.1 -From 5d301b98971bb80401621745fb04558da692e0f5 Mon Sep 17 00:00:00 2001 +From 758058f370b319e78a2a75a7d2f294bf1080c3c5 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 11:18:16 +0200 -Subject: [PATCH 71/90] add some missing multi media keys +Subject: [PATCH 71/93] add some missing multi media keys --- system/keymaps/keyboard.xml | 3 +++ @@ -8417,13 +8417,13 @@ index ee6bb69..364b45a 100644 XBMCVK_LCONTROL = 0xD0, XBMCVK_RCONTROL = 0xD1, -- -1.8.5-rc3 +1.8.5.1 -From 3abd2f1d1301237e318b88d2b485ce936cbbc9aa Mon Sep 17 00:00:00 2001 +From e70fa76c0a10aa58b820a7f9befb9fbee525413e Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 10 Aug 2013 15:53:45 +0200 -Subject: [PATCH 72/90] X11: squash multi +Subject: [PATCH 72/93] X11: squash multi --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -8443,13 +8443,13 @@ index df5fe9b..d8e04d6 100644 bool CWinSystemX11::IsSuitableVisual(XVisualInfo *vInfo) -- -1.8.5-rc3 +1.8.5.1 -From a840373da59aa82aaf98c664bc6c514c67515ef4 Mon Sep 17 00:00:00 2001 +From ab48d6046e1f19a3a63982e0cb305ab636934492 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 3 Sep 2013 20:46:17 +0200 -Subject: [PATCH 73/90] X11: do not poll default monitor +Subject: [PATCH 73/93] X11: do not poll default monitor --- xbmc/windowing/X11/WinSystemX11.cpp | 2 +- @@ -8469,13 +8469,13 @@ index d8e04d6..01f5272 100644 int numScreens = XScreenCount(m_dpy); -- -1.8.5-rc3 +1.8.5.1 -From 278c1d3ececa6e1032db52fcddc053b0454d2e5b Mon Sep 17 00:00:00 2001 +From 45c2269a1401260a06bb80e979f25d5287f45bda Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 29 Oct 2013 20:57:28 +0100 -Subject: [PATCH 74/90] X11: fix broken monitor switching +Subject: [PATCH 74/93] X11: fix broken monitor switching --- system/settings/settings.xml | 1 - @@ -8483,7 +8483,7 @@ Subject: [PATCH 74/90] X11: fix broken monitor switching 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 93eaa5c..8e77489 100644 +index 8eb7dbb..421ffaf 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2090,7 +2090,6 @@ @@ -8575,13 +8575,13 @@ index 40bc3b3..1663836 100644 current = monitors[i]; } -- -1.8.5-rc3 +1.8.5.1 -From 01f349f7b3e82deec46b8c1fe153712e4973cf01 Mon Sep 17 00:00:00 2001 +From 49ae2e2a01c38fd1848dfac82ab6c3a32c288fd7 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 29 Oct 2013 20:57:59 +0100 -Subject: [PATCH 75/90] X11: remove polling for connected outputs, use xrr +Subject: [PATCH 75/93] X11: remove polling for connected outputs, use xrr events --- @@ -8879,13 +8879,13 @@ index 7ec5be4..14622cb 100644 bool m_bIsInternalXrr; bool m_newGlContext; -- -1.8.5-rc3 +1.8.5.1 -From 6828a6eed9d58fd7bd201a2c113de92658826eff Mon Sep 17 00:00:00 2001 +From 2bc5cf4bc401dd3b4950f98cfbfe6976050363c3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 31 Oct 2013 09:37:13 +0100 -Subject: [PATCH 76/90] X11: remove grabbing of keyboard and mouse +Subject: [PATCH 76/93] X11: remove grabbing of keyboard and mouse --- xbmc/windowing/WinEventsX11.cpp | 4 ---- @@ -9000,13 +9000,13 @@ index 14622cb..d1c8729 100644 CCriticalSection m_resourceSection; std::vector m_resources; -- -1.8.5-rc3 +1.8.5.1 -From 400b554f3371d7b426a1031fdf0bbddcade39434 Mon Sep 17 00:00:00 2001 +From a5d07207c4a24f8a735b0a6c2090ddbd4a013419 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 31 Oct 2013 10:46:40 +0100 -Subject: [PATCH 77/90] X11: set ExposureMask on gl window, fixes not updated +Subject: [PATCH 77/93] X11: set ExposureMask on gl window, fixes not updated areas --- @@ -9029,13 +9029,13 @@ index 695b352..e55583c 100644 m_glWindow = XCreateWindow(m_dpy, m_mainWindow, 0, 0, width, height, 0, vi->depth, -- -1.8.5-rc3 +1.8.5.1 -From b8230a5002631d595a70754f92c63e26c8b63a8c Mon Sep 17 00:00:00 2001 +From 5e6029041ca941d58ab5f520a244941953eb3c99 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 31 Oct 2013 11:25:19 +0100 -Subject: [PATCH 78/90] X11: drop shortcuts, have WM do this +Subject: [PATCH 78/93] X11: drop shortcuts, have WM do this --- xbmc/windowing/WinEventsX11.cpp | 21 --------------------- @@ -9094,20 +9094,20 @@ index 6429291..4334d21 100644 Display *m_display; Window m_window; -- -1.8.5-rc3 +1.8.5.1 -From 901f3893fd34d02b74abc981c3f50e4498791b4d Mon Sep 17 00:00:00 2001 +From d2e99670e8cb7ff6507bcf99d9b562fa46c226a1 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 7 Nov 2013 15:02:00 +0100 -Subject: [PATCH 79/90] X11: adapt to new settings +Subject: [PATCH 79/93] X11: adapt to new settings --- system/settings/settings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/system/settings/settings.xml b/system/settings/settings.xml -index 8e77489..c21c581 100644 +index 421ffaf..5411582 100644 --- a/system/settings/settings.xml +++ b/system/settings/settings.xml @@ -2050,6 +2050,7 @@ @@ -9119,13 +9119,13 @@ index 8e77489..c21c581 100644 0 -- -1.8.5-rc3 +1.8.5.1 -From 3c1f1002e9de2e344b7332ffe4db75c842b9d039 Mon Sep 17 00:00:00 2001 +From d6c685cc3effc5d9255482ff8b924b81bd490fc3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 9 Nov 2013 12:20:05 +0100 -Subject: [PATCH 80/90] vdpau: move cropping of top and bottom lines to +Subject: [PATCH 80/93] vdpau: move cropping of top and bottom lines to renderer --- @@ -9135,10 +9135,10 @@ Subject: [PATCH 80/90] vdpau: move cropping of top and bottom lines to 3 files changed, 34 insertions(+), 50 deletions(-) diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -index 600ffa7..9df5cdb 100644 +index aa52f72..801ecb2 100644 --- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -@@ -1611,7 +1611,6 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field) +@@ -1536,7 +1536,6 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field) // make sure we know the correct texture size GetPlaneTextureSize(plane); @@ -9146,7 +9146,7 @@ index 600ffa7..9df5cdb 100644 // Try some clamping or wrapping glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); -@@ -1658,10 +1657,10 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field) +@@ -1583,10 +1582,10 @@ void CLinuxRendererGL::RenderVDPAU(int index, int field) } else { @@ -9161,7 +9161,7 @@ index 600ffa7..9df5cdb 100644 } glEnd(); VerifyGLState(); -@@ -2399,23 +2398,27 @@ bool CLinuxRendererGL::UploadVDPAUTexture(int index) +@@ -2407,23 +2406,27 @@ bool CLinuxRendererGL::UploadVDPAUTexture(int index) plane.id = vdpau->texture[0]; @@ -9316,13 +9316,13 @@ index abe8da2..2dd3c28 100644 int m_mixerstep; int m_mixersteps; -- -1.8.5-rc3 +1.8.5.1 -From 320e42a901d5215c15491809c114d9daad41e742 Mon Sep 17 00:00:00 2001 +From f4c990f0d4773c8c78ade7f02376e5554328bfe5 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 14 Nov 2013 09:28:24 +0100 -Subject: [PATCH 81/90] X11: adapt to changes in cstdstring +Subject: [PATCH 81/93] X11: adapt to changes in cstdstring --- xbmc/windowing/X11/WinSystemX11.cpp | 4 ++-- @@ -9367,13 +9367,13 @@ index 8525ede..c94f2e3 100644 int status = system(cmd.c_str()); if (status == -1) -- -1.8.5-rc3 +1.8.5.1 -From a55531e7c98ae16d4a79b2f0881f4553f184f1e8 Mon Sep 17 00:00:00 2001 +From e210a8565d7c8853bd3f8f0955cfd3816513fb49 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 14 Nov 2013 18:50:57 +0100 -Subject: [PATCH 82/90] dvdplayer: fix failed to get stream message, lookup +Subject: [PATCH 82/93] dvdplayer: fix failed to get stream message, lookup streams the same way as getting the index --- @@ -9394,13 +9394,13 @@ index 70ec003..8cb0aa7 100644 count++; if(count == index) -- -1.8.5-rc3 +1.8.5.1 -From 40fd61774b2a28df647a7b3d5aa98fb9981c9b0c Mon Sep 17 00:00:00 2001 +From 5c081553d25d03ae59a0434bb628abd2438f1f01 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 14 Nov 2013 19:22:01 +0100 -Subject: [PATCH 83/90] omxplayer: fix failed to get stream message +Subject: [PATCH 83/93] omxplayer: fix failed to get stream message --- xbmc/cores/omxplayer/OMXPlayer.cpp | 2 +- @@ -9420,25 +9420,97 @@ index 7d13609..9e3bea5 100644 if((m_Streams[i].flags & flag) != flag) continue; -- -1.8.5-rc3 +1.8.5.1 -From 0f367748d09f9347f792f165b026398935d1d258 Mon Sep 17 00:00:00 2001 -From: Marcel Groothuis -Date: Fri, 8 Nov 2013 21:49:13 +0100 -Subject: [PATCH 84/90] ffmpeg demuxer: faster channel change for PVR addons - without internal demuxing (such as MediaPortal, ArgusTV, MythTV, NextPVR) - Credits: FernetMenta, Davilla, Popcornmix +From 3a7db678e0decf1ef6c8fb2b9afa64445c478c12 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 18 Nov 2013 17:44:31 +0100 +Subject: [PATCH 84/93] ActiveAE: correct time of buffered samples by resample + ratio --- - lib/DllAvCodec.h | 6 +- - .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 92 ++++++++++++++++++++-- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 3 +- - .../dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp | 12 ++- - 4 files changed, 101 insertions(+), 12 deletions(-) + xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 2 +- + xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +index 3928dac..ffc2f16 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +@@ -99,7 +99,7 @@ float CEngineStats::GetDelay(CActiveAEStream *stream) + if (delay < 0) + delay = 0.0; + +- delay += stream->m_bufferedTime; ++ delay += stream->m_bufferedTime / stream->m_streamResampleRatio; + return delay; + } + +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp +index d5b01ea..9914e9e 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp +@@ -56,6 +56,7 @@ + m_leftoverBuffer = new uint8_t[m_format.m_frameSize]; + m_leftoverBytes = 0; + m_forceResampler = false; ++ m_streamResampleRatio = 1.0; + } + + CActiveAEStream::~CActiveAEStream() +-- +1.8.5.1 + + +From 32a3f63509ba72797dc89dfc3c29d031c88df4d5 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Wed, 4 Dec 2013 12:55:32 +0100 +Subject: [PATCH 85/93] ActiveAE: suspend sink during change of refresh rate + +--- + xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +index ffc2f16..73d6597 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +@@ -2240,12 +2240,12 @@ void CActiveAE::SetSoundMode(const int mode) + + void CActiveAE::OnLostDevice() + { +-// m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYLOST); ++ m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYLOST); + } + + void CActiveAE::OnResetDevice() + { +-// m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYRESET); ++ m_controlPort.SendOutMessage(CActiveAEControlProtocol::DISPLAYRESET); + } + + //----------------------------------------------------------------------------- +-- +1.8.5.1 + + +From bb87afb6dfc78efc2c3797d4229d208d1e690804 Mon Sep 17 00:00:00 2001 +From: Marcel Groothuis +Date: Thu, 5 Dec 2013 22:02:50 +0100 +Subject: [PATCH 86/93] ffmpeg demuxer: faster channel change for PVR addons + without internal demuxing (such as MediaPortal, ArgusTV, MythTV, NextPVR) + Credits: FernetMenta, Davilla, Popcornmix, Whaupt + +--- + lib/DllAvCodec.h | 10 +- + .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 143 ++++++++++++++++++--- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 5 +- + .../dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp | 13 +- + 4 files changed, 144 insertions(+), 27 deletions(-) diff --git a/lib/DllAvCodec.h b/lib/DllAvCodec.h -index 5cef736..3500670 100644 +index 5cef736..cfffe2d 100644 --- a/lib/DllAvCodec.h +++ b/lib/DllAvCodec.h @@ -56,7 +56,7 @@ class DllAvCodecInterface @@ -9450,6 +9522,21 @@ index 5cef736..3500670 100644 virtual AVCodec *avcodec_find_decoder(enum AVCodecID id)=0; virtual AVCodec *avcodec_find_encoder(enum AVCodecID id)=0; virtual int avcodec_close_dont_call(AVCodecContext *avctx)=0; +@@ -109,12 +109,12 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface + ::avcodec_register_all(); + } + virtual void avcodec_flush_buffers(AVCodecContext *avctx) { ::avcodec_flush_buffers(avctx); } +- virtual int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) ++ virtual int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) + { + CSingleLock lock(DllAvCodec::m_critSection); + return ::avcodec_open2(avctx, codec, options); + } +- virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; } ++ virtual int avcodec_open2_dont_call(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; } + virtual int avcodec_close_dont_call(AVCodecContext *avctx) { *(volatile int *)0x0 = 0; return 0; } + virtual AVCodec *avcodec_find_decoder(enum AVCodecID id) { return ::avcodec_find_decoder(id); } + virtual AVCodec *avcodec_find_encoder(enum AVCodecID id) { return ::avcodec_find_encoder(id); } @@ -178,7 +178,7 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface { DECLARE_DLL_WRAPPER(DllAvCodec, DLL_PATH_LIBAVCODEC) @@ -9469,7 +9556,7 @@ index 5cef736..3500670 100644 CSingleLock lock(DllAvCodec::m_critSection); return avcodec_open2_dont_call(avctx,codec, options); diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index 25c3f4f..e81ca03 100644 +index 25c3f4f..f0150f2 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp @@ -51,6 +51,8 @@ @@ -9511,16 +9598,23 @@ index 25c3f4f..e81ca03 100644 if( m_pInput->GetContent().length() > 0 ) { std::string content = m_pInput->GetContent(); -@@ -450,7 +452,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) +@@ -450,13 +452,12 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) m_bMatroska = strncmp(m_pFormatContext->iformat->name, "matroska", 8) == 0; // for "matroska.webm" m_bAVI = strcmp(m_pFormatContext->iformat->name, "avi") == 0; - if (streaminfo) + if (m_streaminfo) { - /* too speed up dvd switches, only analyse very short */ +- /* too speed up dvd switches, only analyse very short */ ++ /* to speed up dvd switches, only analyse very short */ if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD)) -@@ -476,6 +478,9 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) + m_pFormatContext->max_analyze_duration = 500000; + +- + CLog::Log(LOGDEBUG, "%s - avformat_find_stream_info starting", __FUNCTION__); + int iErr = m_dllAvFormat.avformat_find_stream_info(m_pFormatContext, NULL); + if (iErr < 0) +@@ -476,6 +477,9 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput) } CLog::Log(LOGDEBUG, "%s - av_find_stream_info finished", __FUNCTION__); } @@ -9530,7 +9624,7 @@ index 25c3f4f..e81ca03 100644 // reset any timeout m_timeout.SetInfinite(); -@@ -533,7 +538,7 @@ void CDVDDemuxFFmpeg::Reset() +@@ -533,7 +537,7 @@ void CDVDDemuxFFmpeg::Reset() { CDVDInputStream* pInputStream = m_pInput; Dispose(); @@ -9539,397 +9633,12 @@ index 25c3f4f..e81ca03 100644 } void CDVDDemuxFFmpeg::Flush() -@@ -730,6 +735,83 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() - { - AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; - -+ AVStream *st = m_pFormatContext->streams[m_pkt.pkt.stream_index]; -+ // Fast udp/mpegts startup and channel switching. -+ // Set streaminfo false to skip avformat_find_stream_info (slow) -+ // But we do need a proper codec extradata so fill it in for ffmpeg. -+ // The idea is to detect an IDR: SPS + PPS + frame which can be decoded. -+ // This block is not entered if we already split extradata. -+ // This routine is based on avformat_find_stream_info and friends. -+ if(st->parser && st->parser->parser->split && !st->codec->extradata) -+ { -+ int i = st->parser->parser->split(st->codec, m_pkt.pkt.data, m_pkt.pkt.size); -+ if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) -+ { -+ // Found extradata, fill it in. This will cause -+ // a new stream to be created and used. -+ st->codec->extradata_size = i; -+ st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); -+ if (st->codec->extradata) -+ { -+ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); -+ memcpy(st->codec->extradata, m_pkt.pkt.data, st->codec->extradata_size); -+ memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); -+ -+ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) -+ { -+ const AVCodec* codec; -+ AVDictionary *thread_opt = NULL; -+ codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); -+ // Force thread count to 1 since the h264 decoder will not extract -+ // SPS and PPS to extradata during multi-threaded decoding -+ m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); -+ m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); -+ -+ // We don't need to actually decode here -+ st->codec->skip_idct = AVDISCARD_ALL; -+ st->codec->skip_frame = AVDISCARD_ALL; -+ st->codec->skip_loop_filter = AVDISCARD_ALL; -+ -+ // This assumes that the current ffmpeg pkt contains a key_frame -+ AVFrame picture; -+ memset(&picture, 0, sizeof(AVFrame)); -+ picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; -+ picture.pkt_pos = -1; -+ picture.key_frame = 1; -+ picture.format = -1; -+ -+ int rtn, got_picture = 0; -+ rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, &m_pkt.pkt); -+ if (rtn < 0) -+ { -+ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); -+ // Clear the extradata to allow entering this extradata section again -+ m_dllAvUtil.av_free(st->codec->extradata); -+ st->codec->extradata = NULL; -+ st->codec->extradata_size = 0; -+ } -+ -+ m_dllAvCodec.avcodec_close(st->codec); -+ m_dllAvUtil.av_dict_free(&thread_opt); -+ -+ st->parser->flags = 0; -+ int has_codec_parameters = st->codec->width && st->codec->pix_fmt != PIX_FMT_NONE; -+ //CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() rtn(%d), got_picture(%d), has_codec_parameters(%d)", rtn, got_picture, has_codec_parameters); -+ -+ if (!has_codec_parameters) -+ { -+ pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); -+ return pPacket; -+ } -+ } -+ } -+ else -+ { -+ st->codec->extradata_size = 0; -+ } -+ } -+ } -+ - if (m_program != UINT_MAX) - { - /* check so packet belongs to selected program */ -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -index 35abbdf..309f554 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -@@ -89,7 +89,7 @@ class CDVDDemuxFFmpeg : public CDVDDemux - CDVDDemuxFFmpeg(); - virtual ~CDVDDemuxFFmpeg(); - -- bool Open(CDVDInputStream* pInput); -+ bool Open(CDVDInputStream* pInput, bool streaminfo = true); - void Dispose(); - void Reset(); - void Flush(); -@@ -162,5 +162,6 @@ class CDVDDemuxFFmpeg : public CDVDDemux - - bool m_bPtsWrap, m_bPtsWrapChecked; - int64_t m_iStartTime, m_iMaxTime, m_iEndTime; -+ bool m_streaminfo; - }; - -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp -index ca689d0..081219b 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp -@@ -99,17 +99,23 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) - } - #endif - -+ bool streaminfo = true; /* Look for streams before playback */ - if (pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER)) - { - CDVDInputStreamPVRManager* pInputStreamPVR = (CDVDInputStreamPVRManager*)pInputStream; - CDVDInputStream* pOtherStream = pInputStreamPVR->GetOtherStream(); -+ -+ /* Don't parse the streaminfo for live streams to reduce the channel switch time */ -+ bool liveStream = (pInputStream->GetFileName().substr(0, 14) == "pvr://channels"); -+ streaminfo = !liveStream; -+ - if(pOtherStream) - { - /* Used for MediaPortal PVR addon (uses PVR otherstream for playback of rtsp streams) */ - if (pOtherStream->IsStreamType(DVDSTREAM_TYPE_FFMPEG)) - { - auto_ptr demuxer(new CDVDDemuxFFmpeg()); -- if(demuxer->Open(pOtherStream)) -+ if(demuxer->Open(pOtherStream, streaminfo)) - return demuxer.release(); - else - return NULL; -@@ -118,7 +124,7 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) - - std::string filename = pInputStream->GetFileName(); - /* Use PVR demuxer only for live streams */ -- if (filename.substr(0, 14) == "pvr://channels") -+ if (liveStream) - { - boost::shared_ptr client; - if (g_PVRClients->GetPlayingClient(client) && -@@ -134,7 +140,7 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) - } - - auto_ptr demuxer(new CDVDDemuxFFmpeg()); -- if(demuxer->Open(pInputStream)) -+ if(demuxer->Open(pInputStream, streaminfo)) - return demuxer.release(); - else - return NULL; --- -1.8.5-rc3 - - -From 9995384627c298f86f115e33d24c4f76ac3bc4e9 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sun, 10 Nov 2013 10:13:06 +0100 -Subject: [PATCH 85/90] ffmpeg demuxer: refactoring for fast channel change - ---- - .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 156 +++++++++++---------- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 1 + - 2 files changed, 81 insertions(+), 76 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index e81ca03..7fdd465 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -733,85 +733,13 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() +@@ -728,25 +732,32 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() } else { -- AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; -- -- AVStream *st = m_pFormatContext->streams[m_pkt.pkt.stream_index]; -- // Fast udp/mpegts startup and channel switching. -- // Set streaminfo false to skip avformat_find_stream_info (slow) -- // But we do need a proper codec extradata so fill it in for ffmpeg. -- // The idea is to detect an IDR: SPS + PPS + frame which can be decoded. -- // This block is not entered if we already split extradata. -- // This routine is based on avformat_find_stream_info and friends. -- if(st->parser && st->parser->parser->split && !st->codec->extradata) -+ if (!m_streaminfo) - { -- int i = st->parser->parser->split(st->codec, m_pkt.pkt.data, m_pkt.pkt.size); -- if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) -- { -- // Found extradata, fill it in. This will cause -- // a new stream to be created and used. -- st->codec->extradata_size = i; -- st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); -- if (st->codec->extradata) -- { -- CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); -- memcpy(st->codec->extradata, m_pkt.pkt.data, st->codec->extradata_size); -- memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); -- -- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) -- { -- const AVCodec* codec; -- AVDictionary *thread_opt = NULL; -- codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); -- // Force thread count to 1 since the h264 decoder will not extract -- // SPS and PPS to extradata during multi-threaded decoding -- m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); -- m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); -- -- // We don't need to actually decode here -- st->codec->skip_idct = AVDISCARD_ALL; -- st->codec->skip_frame = AVDISCARD_ALL; -- st->codec->skip_loop_filter = AVDISCARD_ALL; -- -- // This assumes that the current ffmpeg pkt contains a key_frame -- AVFrame picture; -- memset(&picture, 0, sizeof(AVFrame)); -- picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; -- picture.pkt_pos = -1; -- picture.key_frame = 1; -- picture.format = -1; -- -- int rtn, got_picture = 0; -- rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, &m_pkt.pkt); -- if (rtn < 0) -- { -- CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); -- // Clear the extradata to allow entering this extradata section again -- m_dllAvUtil.av_free(st->codec->extradata); -- st->codec->extradata = NULL; -- st->codec->extradata_size = 0; -- } -- -- m_dllAvCodec.avcodec_close(st->codec); -- m_dllAvUtil.av_dict_free(&thread_opt); -- -- st->parser->flags = 0; -- int has_codec_parameters = st->codec->width && st->codec->pix_fmt != PIX_FMT_NONE; -- //CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() rtn(%d), got_picture(%d), has_codec_parameters(%d)", rtn, got_picture, has_codec_parameters); -- -- if (!has_codec_parameters) -- { -- pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); -- return pPacket; -- } -- } -- } -- else -- { -- st->codec->extradata_size = 0; -- } -- } -+ GetStreamInfo(&m_pkt.pkt); - } - -+ AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; -+ - if (m_program != UINT_MAX) - { - /* check so packet belongs to selected program */ -@@ -1766,3 +1694,79 @@ bool CDVDDemuxFFmpeg::IsProgramChange() - } - return false; - } -+ -+void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) -+{ -+ AVStream *st = m_pFormatContext->streams[pkt->stream_index]; -+ CDemuxStream *stream = GetStreamInternal(pkt->stream_index); -+ -+ // if the stream is new, tell ffmpeg to parse the stream -+ if (!stream && !st->parser) -+ { -+ st->need_parsing = AVSTREAM_PARSE_FULL; -+ } -+ -+ // split extradata and decode some info for video streams -+ if(st->parser && st->parser->parser->split && !st->codec->extradata) -+ { -+ int i = st->parser->parser->split(st->codec, pkt->data, pkt->size); -+ if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) -+ { -+ // Found extradata, fill it in. This will cause -+ // a new stream to be created and used. -+ st->codec->extradata_size = i; -+ st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); -+ if (st->codec->extradata) -+ { -+ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); -+ memcpy(st->codec->extradata, pkt->data, st->codec->extradata_size); -+ memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); -+ -+ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) -+ { -+ const AVCodec* codec; -+ AVDictionary *thread_opt = NULL; -+ codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); -+ // Force thread count to 1 since the h264 decoder will not extract -+ // SPS and PPS to extradata during multi-threaded decoding -+ m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); -+ m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); -+ -+ // We don't need to actually decode here -+ st->codec->skip_idct = AVDISCARD_ALL; -+ st->codec->skip_frame = AVDISCARD_ALL; -+ st->codec->skip_loop_filter = AVDISCARD_ALL; -+ -+ // We are looking for an IDR frame -+ AVFrame picture; -+ memset(&picture, 0, sizeof(AVFrame)); -+ picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; -+ picture.pkt_pos = -1; -+ picture.key_frame = 1; -+ picture.format = -1; -+ -+ int rtn, got_picture = 0; -+ rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, pkt); -+ if (rtn < 0 || !st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE) -+ { -+ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); -+ // Clear the extradata to allow entering this extradata section again -+ m_dllAvUtil.av_free(st->codec->extradata); -+ st->codec->extradata = NULL; -+ st->codec->extradata_size = 0; -+ } -+ -+ m_dllAvCodec.avcodec_close(st->codec); -+ m_dllAvUtil.av_dict_free(&thread_opt); -+ -+ st->parser->flags = 0; -+ } -+ } -+ else -+ { -+ st->codec->extradata_size = 0; -+ } -+ } -+ } -+ -+} -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -index 309f554..e89022a 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -@@ -128,6 +128,7 @@ class CDVDDemuxFFmpeg : public CDVDDemux - CDemuxStream* GetStreamInternal(int iStreamId); - void CreateStreams(unsigned int program = UINT_MAX); - void DisposeStreams(); -+ void GetStreamInfo(AVPacket *pkt); - - AVDictionary *GetFFMpegOptionsFromURL(const CURL &url); - double ConvertTimestamp(int64_t pts, int den, int num); --- -1.8.5-rc3 - - -From de43ffd7fede6dae7b75ffc384944ed048507ed5 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Wed, 13 Nov 2013 08:53:04 +0100 -Subject: [PATCH 86/90] ffmpeg demuxer: reduce time for finding stream info - ---- - .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 141 ++++++++++++--------- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 3 +- - 2 files changed, 83 insertions(+), 61 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index 7fdd465..2c1aeb6 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -454,10 +454,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) - - if (m_streaminfo) - { -- /* too speed up dvd switches, only analyse very short */ -- if(m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD)) -- m_pFormatContext->max_analyze_duration = 500000; -- -+ m_pFormatContext->max_analyze_duration = 500000; - - CLog::Log(LOGDEBUG, "%s - avformat_find_stream_info starting", __FUNCTION__); - int iErr = m_dllAvFormat.avformat_find_stream_info(m_pFormatContext, NULL); -@@ -733,30 +730,32 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() - } - else - { -- if (!m_streaminfo) -- { -- GetStreamInfo(&m_pkt.pkt); -- } + ParsePacket(&m_pkt.pkt); - ++ AVStream *stream = m_pFormatContext->streams[m_pkt.pkt.stream_index]; - if (m_program != UINT_MAX) @@ -9967,75 +9676,45 @@ index 7fdd465..2c1aeb6 100644 if (pPacket) { -@@ -1695,7 +1694,7 @@ bool CDVDDemuxFFmpeg::IsProgramChange() +@@ -1684,3 +1695,101 @@ bool CDVDDemuxFFmpeg::IsProgramChange() + } return false; } - --void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) ++ +void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) - { - AVStream *st = m_pFormatContext->streams[pkt->stream_index]; - CDemuxStream *stream = GetStreamInternal(pkt->stream_index); -@@ -1706,7 +1705,7 @@ void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) - st->need_parsing = AVSTREAM_PARSE_FULL; - } - -- // split extradata and decode some info for video streams ++{ ++ AVStream *st = m_pFormatContext->streams[pkt->stream_index]; ++ CDemuxStream *stream = GetStreamInternal(pkt->stream_index); ++ ++ // if the stream is new, tell ffmpeg to parse the stream ++ if (!stream && !st->parser) ++ { ++ st->need_parsing = AVSTREAM_PARSE_FULL; ++ } ++ + // split extradata - if(st->parser && st->parser->parser->split && !st->codec->extradata) - { - int i = st->parser->parser->split(st->codec, pkt->data, pkt->size); -@@ -1721,46 +1720,6 @@ void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) - CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); - memcpy(st->codec->extradata, pkt->data, st->codec->extradata_size); - memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); -- -- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) -- { -- const AVCodec* codec; -- AVDictionary *thread_opt = NULL; -- codec = st->codec->codec ? st->codec->codec : m_dllAvCodec.avcodec_find_decoder(st->codec->codec_id); -- // Force thread count to 1 since the h264 decoder will not extract -- // SPS and PPS to extradata during multi-threaded decoding -- m_dllAvUtil.av_dict_set(&thread_opt, "threads", "1", 0); -- m_dllAvCodec.avcodec_open2(st->codec, codec, &thread_opt); -- -- // We don't need to actually decode here -- st->codec->skip_idct = AVDISCARD_ALL; -- st->codec->skip_frame = AVDISCARD_ALL; -- st->codec->skip_loop_filter = AVDISCARD_ALL; -- -- // We are looking for an IDR frame -- AVFrame picture; -- memset(&picture, 0, sizeof(AVFrame)); -- picture.pts = picture.pkt_dts = picture.pkt_pts = picture.best_effort_timestamp = AV_NOPTS_VALUE; -- picture.pkt_pos = -1; -- picture.key_frame = 1; -- picture.format = -1; -- -- int rtn, got_picture = 0; -- rtn = m_dllAvCodec.avcodec_decode_video2(st->codec, &picture, &got_picture, pkt); -- if (rtn < 0 || !st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE) -- { -- CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() decode failed (return value=%d)", rtn); -- // Clear the extradata to allow entering this extradata section again -- m_dllAvUtil.av_free(st->codec->extradata); -- st->codec->extradata = NULL; -- st->codec->extradata_size = 0; -- } -- -- m_dllAvCodec.avcodec_close(st->codec); -- m_dllAvUtil.av_dict_free(&thread_opt); -- -- st->parser->flags = 0; -- } - } - else - { -@@ -1769,4 +1728,66 @@ void CDVDDemuxFFmpeg::GetStreamInfo(AVPacket *pkt) - } - } - ++ if(st->parser && st->parser->parser->split && !st->codec->extradata) ++ { ++ int i = st->parser->parser->split(st->codec, pkt->data, pkt->size); ++ if (i > 0 && i < FF_MAX_EXTRADATA_SIZE) ++ { ++ // Found extradata, fill it in. This will cause ++ // a new stream to be created and used. ++ st->codec->extradata_size = i; ++ st->codec->extradata = (uint8_t*)m_dllAvUtil.av_malloc(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); ++ if (st->codec->extradata) ++ { ++ CLog::Log(LOGDEBUG, "CDVDDemuxFFmpeg::Read() fetching extradata, extradata_size(%d)", st->codec->extradata_size); ++ memcpy(st->codec->extradata, pkt->data, st->codec->extradata_size); ++ memset(st->codec->extradata + i, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ } ++ else ++ { ++ st->codec->extradata_size = 0; ++ } ++ } ++ } ++ + // for video we need a decoder to get desired information into codec context + if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && + (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE)) @@ -10098,51 +9777,131 @@ index 7fdd465..2c1aeb6 100644 + } + } + return true; - } ++} diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -index e89022a..acde9a8 100644 +index 35abbdf..acde9a8 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h -@@ -128,7 +128,8 @@ class CDVDDemuxFFmpeg : public CDVDDemux +@@ -89,7 +89,7 @@ class CDVDDemuxFFmpeg : public CDVDDemux + CDVDDemuxFFmpeg(); + virtual ~CDVDDemuxFFmpeg(); + +- bool Open(CDVDInputStream* pInput); ++ bool Open(CDVDInputStream* pInput, bool streaminfo = true); + void Dispose(); + void Reset(); + void Flush(); +@@ -128,6 +128,8 @@ class CDVDDemuxFFmpeg : public CDVDDemux CDemuxStream* GetStreamInternal(int iStreamId); void CreateStreams(unsigned int program = UINT_MAX); void DisposeStreams(); -- void GetStreamInfo(AVPacket *pkt); + void ParsePacket(AVPacket *pkt); + bool IsVideoReady(); AVDictionary *GetFFMpegOptionsFromURL(const CURL &url); double ConvertTimestamp(int64_t pts, int den, int num); +@@ -162,5 +164,6 @@ class CDVDDemuxFFmpeg : public CDVDDemux + + bool m_bPtsWrap, m_bPtsWrapChecked; + int64_t m_iStartTime, m_iMaxTime, m_iEndTime; ++ bool m_streaminfo; + }; + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp +index ca689d0..f383563 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp +@@ -99,26 +99,31 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + } + #endif + ++ bool streaminfo = true; /* Look for streams before playback */ + if (pInputStream->IsStreamType(DVDSTREAM_TYPE_PVRMANAGER)) + { + CDVDInputStreamPVRManager* pInputStreamPVR = (CDVDInputStreamPVRManager*)pInputStream; + CDVDInputStream* pOtherStream = pInputStreamPVR->GetOtherStream(); ++ ++ /* Don't parse the streaminfo for live streams to reduce the channel switch time */ ++ bool liveStream = (pInputStream->GetFileName().substr(0, 14) == "pvr://channels"); ++ streaminfo = !liveStream; ++ + if(pOtherStream) + { + /* Used for MediaPortal PVR addon (uses PVR otherstream for playback of rtsp streams) */ + if (pOtherStream->IsStreamType(DVDSTREAM_TYPE_FFMPEG)) + { + auto_ptr demuxer(new CDVDDemuxFFmpeg()); +- if(demuxer->Open(pOtherStream)) ++ if(demuxer->Open(pOtherStream, streaminfo)) + return demuxer.release(); + else + return NULL; + } + } + +- std::string filename = pInputStream->GetFileName(); + /* Use PVR demuxer only for live streams */ +- if (filename.substr(0, 14) == "pvr://channels") ++ if (liveStream) + { + boost::shared_ptr client; + if (g_PVRClients->GetPlayingClient(client) && +@@ -134,7 +139,7 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + } + + auto_ptr demuxer(new CDVDDemuxFFmpeg()); +- if(demuxer->Open(pInputStream)) ++ if(demuxer->Open(pInputStream, streaminfo)) + return demuxer.release(); + else + return NULL; -- -1.8.5-rc3 +1.8.5.1 -From e2d5e3a0f84e66bce4c4646642669d571ea8f92d Mon Sep 17 00:00:00 2001 +From 3068eb8359c93ae7e9b2f9ccd733760100ff93b4 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 14 Nov 2013 20:35:04 +0100 -Subject: [PATCH 87/90] ffmoeg demuxer: make sure we start video with an +Subject: [PATCH 87/93] ffmpeg demuxer: make sure we start mpegts video with an i-frame --- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 21 ++++++++++++++++++++- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 1 + - 2 files changed, 21 insertions(+), 1 deletion(-) + .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 31 +++++++++++++++++++++- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h | 1 + + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index 2c1aeb6..aba9b6c 100644 +index f0150f2..eed0c71 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -474,6 +474,9 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) +@@ -448,6 +448,13 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + if (iformat && (strcmp(iformat->name, "mjpeg") == 0) && m_ioContext->seekable == 0) + m_pFormatContext->max_analyze_duration = 500000; + ++ bool short_analyze = false; ++ if (iformat && (strcmp(iformat->name, "mpegts") == 0)) ++ { ++ m_pFormatContext->max_analyze_duration = 500000; ++ short_analyze = true; ++ } ++ + // we need to know if this is matroska or avi later + m_bMatroska = strncmp(m_pFormatContext->iformat->name, "matroska", 8) == 0; // for "matroska.webm" + m_bAVI = strcmp(m_pFormatContext->iformat->name, "avi") == 0; +@@ -476,6 +483,12 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) } } CLog::Log(LOGDEBUG, "%s - av_find_stream_info finished", __FUNCTION__); + -+ // make sure we start video with an i-frame -+ ResetVideoStreams(); ++ if (short_analyze) ++ { ++ // make sure we start video with an i-frame ++ ResetVideoStreams(); ++ } } else m_program = 0; -@@ -1729,7 +1732,7 @@ void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) +@@ -1731,7 +1744,7 @@ void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) } // for video we need a decoder to get desired information into codec context @@ -10151,7 +9910,7 @@ index 2c1aeb6..aba9b6c 100644 (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE)) { // open a decoder, it will be cleared down by ffmpeg on closing the stream -@@ -1791,3 +1794,19 @@ bool CDVDDemuxFFmpeg::IsVideoReady() +@@ -1793,3 +1806,19 @@ bool CDVDDemuxFFmpeg::IsVideoReady() } return true; } @@ -10184,123 +9943,690 @@ index acde9a8..9ec0877 100644 AVDictionary *GetFFMpegOptionsFromURL(const CURL &url); double ConvertTimestamp(int64_t pts, int den, int num); -- -1.8.5-rc3 +1.8.5.1 -From 7173380b805dd7a3ecfc9c1453d34fe413d13ff7 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sat, 16 Nov 2013 16:30:20 +0100 -Subject: [PATCH 88/90] ffmpeg demuxer: short anylyze time for mpegts, squash - me +From ff7af5a2c9b2b2cbcb2551fe1bf869499d52ba7d Mon Sep 17 00:00:00 2001 +From: Wolfgang Haupt +Date: Thu, 5 Dec 2013 22:11:57 +0100 +Subject: [PATCH 88/93] DVDFactoryDemuxer: skip streaminfo for udp tcp and + pvr-channels --- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) + .../dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp | 14 ++++++--- + xbmc/utils/URIUtils.cpp | 35 ++++++++++++++++++++++ + xbmc/utils/URIUtils.h | 4 +++ + 3 files changed, 49 insertions(+), 4 deletions(-) -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index aba9b6c..456c1c0 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -448,6 +448,13 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) - if (iformat && (strcmp(iformat->name, "mjpeg") == 0) && m_ioContext->seekable == 0) - m_pFormatContext->max_analyze_duration = 500000; +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp +index f383563..d6580fd 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDFactoryDemuxer.cpp +@@ -105,9 +105,9 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + CDVDInputStreamPVRManager* pInputStreamPVR = (CDVDInputStreamPVRManager*)pInputStream; + CDVDInputStream* pOtherStream = pInputStreamPVR->GetOtherStream(); -+ bool short_analyze = false; -+ if (iformat && (strcmp(iformat->name, "mpegts") == 0)) +- /* Don't parse the streaminfo for live streams to reduce the channel switch time */ +- bool liveStream = (pInputStream->GetFileName().substr(0, 14) == "pvr://channels"); +- streaminfo = !liveStream; ++ /* Don't parse the streaminfo for some cases of streams to reduce the channel switch time */ ++ bool useFastswitch = URIUtils::IsUsingFastSwitch(pInputStream->GetFileName()); ++ streaminfo = !useFastswitch; + + if(pOtherStream) + { +@@ -123,7 +123,7 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + } + + /* Use PVR demuxer only for live streams */ +- if (liveStream) ++ if (URIUtils::IsPVRChannel(pInputStream->GetFileName())) + { + boost::shared_ptr client; + if (g_PVRClients->GetPlayingClient(client) && +@@ -138,6 +138,12 @@ CDVDDemux* CDVDFactoryDemuxer::CreateDemuxer(CDVDInputStream* pInputStream) + } + } + ++ if (pInputStream->IsStreamType(DVDSTREAM_TYPE_FFMPEG)) + { -+ m_pFormatContext->max_analyze_duration = 500000; -+ short_analyze = true; ++ bool useFastswitch = URIUtils::IsUsingFastSwitch(pInputStream->GetFileName()); ++ streaminfo = !useFastswitch; + } + - // we need to know if this is matroska or avi later - m_bMatroska = strncmp(m_pFormatContext->iformat->name, "matroska", 8) == 0; // for "matroska.webm" - m_bAVI = strcmp(m_pFormatContext->iformat->name, "avi") == 0; -@@ -475,8 +482,11 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) - } - CLog::Log(LOGDEBUG, "%s - av_find_stream_info finished", __FUNCTION__); + auto_ptr demuxer(new CDVDDemuxFFmpeg()); + if(demuxer->Open(pInputStream, streaminfo)) + return demuxer.release(); +diff --git a/xbmc/utils/URIUtils.cpp b/xbmc/utils/URIUtils.cpp +index 5b292bc..89c0bf1 100644 +--- a/xbmc/utils/URIUtils.cpp ++++ b/xbmc/utils/URIUtils.cpp +@@ -737,6 +737,36 @@ bool URIUtils::IsFTP(const CStdString& strFile) + StringUtils::StartsWithNoCase(strFile2, "ftps:"); + } -- // make sure we start video with an i-frame -- ResetVideoStreams(); -+ if (short_analyze) -+ { -+ // make sure we start video with an i-frame -+ ResetVideoStreams(); -+ } - } - else - m_program = 0; ++bool URIUtils::IsUDP(const CStdString& strFile) ++{ ++ CStdString strFile2(strFile); ++ ++ if (IsStack(strFile)) ++ strFile2 = CStackDirectory::GetFirstStackedFile(strFile); ++ ++ return StringUtils::StartsWithNoCase(strFile2, "udp:"); ++} ++ ++bool URIUtils::IsTCP(const CStdString& strFile) ++{ ++ CStdString strFile2(strFile); ++ ++ if (IsStack(strFile)) ++ strFile2 = CStackDirectory::GetFirstStackedFile(strFile); ++ ++ return StringUtils::StartsWithNoCase(strFile2, "tcp:"); ++} ++ ++bool URIUtils::IsPVRChannel(const CStdString& strFile) ++{ ++ CStdString strFile2(strFile); ++ ++ if (IsStack(strFile)) ++ strFile2 = CStackDirectory::GetFirstStackedFile(strFile); ++ ++ return StringUtils::StartsWithNoCase(strFile2, "pvr://channels"); ++} ++ + bool URIUtils::IsDAV(const CStdString& strFile) + { + CStdString strFile2(strFile); +@@ -1198,3 +1228,8 @@ bool URIUtils::UpdateUrlEncoding(std::string &strFilename) + strFilename = newFilename; + return true; + } ++ ++bool URIUtils::IsUsingFastSwitch(const CStdString& strFile) ++{ ++ return IsUDP(strFile) || IsTCP(strFile) || IsPVRChannel(strFile); ++} +diff --git a/xbmc/utils/URIUtils.h b/xbmc/utils/URIUtils.h +index 146bf5c..e030b9d 100644 +--- a/xbmc/utils/URIUtils.h ++++ b/xbmc/utils/URIUtils.h +@@ -78,6 +78,8 @@ class URIUtils + static bool IsDOSPath(const CStdString &path); + static bool IsDVD(const CStdString& strFile); + static bool IsFTP(const CStdString& strFile); ++ static bool IsUDP(const CStdString& strFile); ++ static bool IsTCP(const CStdString& strFile); + static bool IsHD(const CStdString& strFileName); + static bool IsHDHomeRun(const CStdString& strFile); + static bool IsSlingbox(const CStdString& strFile); +@@ -116,6 +118,8 @@ class URIUtils + static bool IsBluray(const CStdString& strFile); + static bool IsAndroidApp(const CStdString& strFile); + static bool IsLibraryFolder(const CStdString& strFile); ++ static bool IsPVRChannel(const CStdString& strFile); ++ static bool IsUsingFastSwitch(const CStdString& strFile); + + static void AddSlashAtEnd(std::string& strFolder); + static bool HasSlashAtEnd(const std::string& strFile, bool checkURL = false); -- -1.8.5-rc3 +1.8.5.1 -From ce004c503e0120cfe6dadbb2f72cce06334ebac2 Mon Sep 17 00:00:00 2001 -From: Marcel Groothuis -Date: Sun, 17 Nov 2013 17:40:40 +0100 -Subject: [PATCH 89/90] Fixed: compilation against external ffmpeg +From 50ee7c408f3cc85152ee5033b5477fa593c8c2bc Mon Sep 17 00:00:00 2001 +From: Sam Stenvall +Date: Thu, 5 Dec 2013 18:26:45 +0200 +Subject: [PATCH 89/93] fix EPG update job (broke in + 5aa9f75ac619a56445a03e1b1a3b68d384c03010) --- - lib/DllAvCodec.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + xbmc/pvr/PVRManager.cpp | 6 +++--- + xbmc/pvr/PVRManager.h | 10 +++++----- + 2 files changed, 8 insertions(+), 8 deletions(-) -diff --git a/lib/DllAvCodec.h b/lib/DllAvCodec.h -index 3500670..cfffe2d 100644 ---- a/lib/DllAvCodec.h -+++ b/lib/DllAvCodec.h -@@ -109,12 +109,12 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface - ::avcodec_register_all(); - } - virtual void avcodec_flush_buffers(AVCodecContext *avctx) { ::avcodec_flush_buffers(avctx); } -- virtual int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) -+ virtual int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) - { - CSingleLock lock(DllAvCodec::m_critSection); - return ::avcodec_open2(avctx, codec, options); - } -- virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; } -+ virtual int avcodec_open2_dont_call(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; } - virtual int avcodec_close_dont_call(AVCodecContext *avctx) { *(volatile int *)0x0 = 0; return 0; } - virtual AVCodec *avcodec_find_decoder(enum AVCodecID id) { return ::avcodec_find_decoder(id); } - virtual AVCodec *avcodec_find_encoder(enum AVCodecID id) { return ::avcodec_find_encoder(id); } +diff --git a/xbmc/pvr/PVRManager.cpp b/xbmc/pvr/PVRManager.cpp +index 81d81c2..a20432f 100644 +--- a/xbmc/pvr/PVRManager.cpp ++++ b/xbmc/pvr/PVRManager.cpp +@@ -1389,10 +1389,10 @@ bool CPVRManager::IsJobPending(const char *strJobName) const + return bReturn; + } + +-void CPVRManager::QueueJob(const char *strJobName, CJob *job, bool bIgnorePending /* = false */) ++void CPVRManager::QueueJob(const char *strJobName, CJob *job, bool bEnsureStarted /*= true*/) + { + CSingleLock lock(m_critSectionTriggers); +- if (!IsStarted() || (!bIgnorePending && IsJobPending(strJobName))) ++ if ((bEnsureStarted && !IsStarted()) || IsJobPending(strJobName)) + return; + + m_pendingUpdates.push_back(job); +@@ -1403,7 +1403,7 @@ void CPVRManager::QueueJob(const char *strJobName, CJob *job, bool bIgnorePendin + + void CPVRManager::TriggerEpgsCreate(void) + { +- QueueJob("pvr-create-epgs", new CPVREpgsCreateJob()); ++ QueueJob("pvr-create-epgs", new CPVREpgsCreateJob(), false); + } + + void CPVRManager::TriggerRecordingsUpdate(void) +diff --git a/xbmc/pvr/PVRManager.h b/xbmc/pvr/PVRManager.h +index 7038410..7220f72 100644 +--- a/xbmc/pvr/PVRManager.h ++++ b/xbmc/pvr/PVRManager.h +@@ -632,14 +632,14 @@ + bool IsJobPending(const char *strJobName) const; + + /*! +- * @brief Adds the job to the list of pending jobs. If bIgnorePending is set +- * to true the job will be added even if there's an identical job already +- * queued ++ * @brief Adds the job to the list of pending jobs (unless an equal job is ++ * already pending) + * @param strJobName the name of the job +- * @param bIgnorePending whether to ignore previously queued identical jobs ++ * @param bEnsureStarted when set to false the job will be executed regardless ++ * of whether the PVR manager has started + * @param job the job + */ +- void QueueJob(const char *strJobName, CJob *job, bool bIgnorePending = false); ++ void QueueJob(const char *strJobName, CJob *job, bool bEnsureStarted = true); + + ManagerState GetState(void) const; + -- -1.8.5-rc3 +1.8.5.1 -From d1d476c8dc8a84ef69e35aaa71c1e7319373a906 Mon Sep 17 00:00:00 2001 +From 10aa52c8d75f928c980cc764bbc7a7b9127848bd Mon Sep 17 00:00:00 2001 From: Rainer Hochecker -Date: Mon, 18 Nov 2013 17:44:31 +0100 -Subject: [PATCH 90/90] ActiveAE: correct time of buffered samples by resample - ratio +Date: Thu, 5 Dec 2013 13:38:56 +0100 +Subject: [PATCH 90/93] IPlayer: let player know on close if it will be + reopened --- - xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 2 +- - xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp | 1 + - 2 files changed, 2 insertions(+), 1 deletion(-) + xbmc/ApplicationPlayer.cpp | 6 +++--- + xbmc/ApplicationPlayer.h | 2 +- + xbmc/cores/ExternalPlayer/ExternalPlayer.cpp | 2 +- + xbmc/cores/ExternalPlayer/ExternalPlayer.h | 2 +- + xbmc/cores/IPlayer.h | 2 +- + xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 +- + xbmc/cores/dvdplayer/DVDPlayer.h | 2 +- + xbmc/cores/omxplayer/OMXPlayer.cpp | 2 +- + xbmc/cores/omxplayer/OMXPlayer.h | 2 +- + xbmc/cores/paplayer/PAPlayer.cpp | 2 +- + xbmc/cores/paplayer/PAPlayer.h | 2 +- + xbmc/network/upnp/UPnPPlayer.cpp | 2 +- + xbmc/network/upnp/UPnPPlayer.h | 2 +- + 13 files changed, 15 insertions(+), 15 deletions(-) +diff --git a/xbmc/ApplicationPlayer.cpp b/xbmc/ApplicationPlayer.cpp +index 1dd8df6..83aa875 100644 +--- a/xbmc/ApplicationPlayer.cpp ++++ b/xbmc/ApplicationPlayer.cpp +@@ -49,13 +49,13 @@ void CApplicationPlayer::ClosePlayer() + } + } + +-void CApplicationPlayer::CloseFile() ++void CApplicationPlayer::CloseFile(bool reopen) + { + boost::shared_ptr player = GetInternal(); + if (player) + { + ++m_iPlayerOPSeq; +- player->CloseFile(); ++ player->CloseFile(reopen); + } + } + +@@ -81,7 +81,7 @@ void CApplicationPlayer::ClosePlayerGapless(PLAYERCOREID newCore) + // but if we do not stop it, we can not distingush callbacks from previous + // item and current item, it will confused us then we can not make correct delay + // callback after the starting state. +- CloseFile(); ++ CloseFile(true); + } + } + +diff --git a/xbmc/ApplicationPlayer.h b/xbmc/ApplicationPlayer.h +index 212389f..21a0b7a 100644 +--- a/xbmc/ApplicationPlayer.h ++++ b/xbmc/ApplicationPlayer.h +@@ -60,7 +60,7 @@ class CApplicationPlayer + int m_iPlaySpeed; + + // player management +- void CloseFile(); ++ void CloseFile(bool reopen = false); + void ClosePlayer(); + void ClosePlayerGapless(PLAYERCOREID newCore); + void CreatePlayer(PLAYERCOREID newCore, IPlayerCallback& callback); +diff --git a/xbmc/cores/ExternalPlayer/ExternalPlayer.cpp b/xbmc/cores/ExternalPlayer/ExternalPlayer.cpp +index 7b72a19..92a222e 100644 +--- a/xbmc/cores/ExternalPlayer/ExternalPlayer.cpp ++++ b/xbmc/cores/ExternalPlayer/ExternalPlayer.cpp +@@ -120,7 +120,7 @@ bool CExternalPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &opti + } + } + +-bool CExternalPlayer::CloseFile() ++bool CExternalPlayer::CloseFile(bool reopen) + { + m_bAbortRequest = true; + +diff --git a/xbmc/cores/ExternalPlayer/ExternalPlayer.h b/xbmc/cores/ExternalPlayer/ExternalPlayer.h +index 11a32a5..f30352b 100644 +--- a/xbmc/cores/ExternalPlayer/ExternalPlayer.h ++++ b/xbmc/cores/ExternalPlayer/ExternalPlayer.h +@@ -36,7 +36,7 @@ class CExternalPlayer : public IPlayer, public CThread + virtual void RegisterAudioCallback(IAudioCallback* pCallback) {} + virtual void UnRegisterAudioCallback() {} + virtual bool OpenFile(const CFileItem& file, const CPlayerOptions &options); +- virtual bool CloseFile(); ++ virtual bool CloseFile(bool reopen = false); + virtual bool IsPlaying() const; + virtual void Pause(); + virtual bool IsPaused() const; +diff --git a/xbmc/cores/IPlayer.h b/xbmc/cores/IPlayer.h +index 21345ae..62cd1be 100644 +--- a/xbmc/cores/IPlayer.h ++++ b/xbmc/cores/IPlayer.h +@@ -133,7 +133,7 @@ class IPlayer + virtual bool OpenFile(const CFileItem& file, const CPlayerOptions& options){ return false;} + virtual bool QueueNextFile(const CFileItem &file) { return false; } + virtual void OnNothingToQueueNotify() {} +- virtual bool CloseFile(){ return true;} ++ virtual bool CloseFile(bool reopen = false) = 0; + virtual bool IsPlaying() const { return false;} + virtual bool CanPause() { return true; }; + virtual void Pause() = 0; +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp +index 8cb0aa7..60475a3 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp ++++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp +@@ -590,7 +590,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options) + } + } + +-bool CDVDPlayer::CloseFile() ++bool CDVDPlayer::CloseFile(bool reopen) + { + CLog::Log(LOGNOTICE, "CDVDPlayer::CloseFile()"); + +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h +index 0ba2c0d..96f7fe5 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.h ++++ b/xbmc/cores/dvdplayer/DVDPlayer.h +@@ -181,7 +181,7 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer + CDVDPlayer(IPlayerCallback& callback); + virtual ~CDVDPlayer(); + virtual bool OpenFile(const CFileItem& file, const CPlayerOptions &options); +- virtual bool CloseFile(); ++ virtual bool CloseFile(bool reopen = false); + virtual bool IsPlaying() const; + virtual void Pause(); + virtual bool IsPaused() const; +diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp +index 9e3bea5..f48a30f 100644 +--- a/xbmc/cores/omxplayer/OMXPlayer.cpp ++++ b/xbmc/cores/omxplayer/OMXPlayer.cpp +@@ -636,7 +636,7 @@ bool COMXPlayer::OpenFile(const CFileItem &file, const CPlayerOptions &options) + } + } + +-bool COMXPlayer::CloseFile() ++bool COMXPlayer::CloseFile(bool reopen) + { + CLog::Log(LOGDEBUG, "COMXPlayer::CloseFile"); + +diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h +index 96eed11..f34764d 100644 +--- a/xbmc/cores/omxplayer/OMXPlayer.h ++++ b/xbmc/cores/omxplayer/OMXPlayer.h +@@ -177,7 +177,7 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer + virtual ~COMXPlayer(); + + virtual bool OpenFile(const CFileItem &file, const CPlayerOptions &options); +- virtual bool CloseFile(); ++ virtual bool CloseFile(bool reopen = false); + virtual bool IsPlaying() const; + virtual void Pause(); + virtual bool IsPaused() const; +diff --git a/xbmc/cores/paplayer/PAPlayer.cpp b/xbmc/cores/paplayer/PAPlayer.cpp +index 1785b73..13339f4 100644 +--- a/xbmc/cores/paplayer/PAPlayer.cpp ++++ b/xbmc/cores/paplayer/PAPlayer.cpp +@@ -509,7 +509,7 @@ inline bool PAPlayer::PrepareStream(StreamInfo *si) + return true; + } + +-bool PAPlayer::CloseFile() ++bool PAPlayer::CloseFile(bool reopen) + { + if (!m_isPaused) + SoftStop(true, true); +diff --git a/xbmc/cores/paplayer/PAPlayer.h b/xbmc/cores/paplayer/PAPlayer.h +index 8321ce2..6ae110a 100644 +--- a/xbmc/cores/paplayer/PAPlayer.h ++++ b/xbmc/cores/paplayer/PAPlayer.h +@@ -46,7 +46,7 @@ class PAPlayer : public IPlayer, public CThread, public IJobCallback + virtual bool OpenFile(const CFileItem& file, const CPlayerOptions &options); + virtual bool QueueNextFile(const CFileItem &file); + virtual void OnNothingToQueueNotify(); +- virtual bool CloseFile(); ++ virtual bool CloseFile(bool reopen = false); + virtual bool IsPlaying() const; + virtual void Pause(); + virtual bool IsPaused() const; +diff --git a/xbmc/network/upnp/UPnPPlayer.cpp b/xbmc/network/upnp/UPnPPlayer.cpp +index b78f97b..a5712c4 100644 +--- a/xbmc/network/upnp/UPnPPlayer.cpp ++++ b/xbmc/network/upnp/UPnPPlayer.cpp +@@ -357,7 +357,7 @@ bool CUPnPPlayer::QueueNextFile(const CFileItem& file) + return false; + } + +-bool CUPnPPlayer::CloseFile() ++bool CUPnPPlayer::CloseFile(bool reopen) + { + NPT_CHECK_POINTER_LABEL_SEVERE(m_delegate, failed); + NPT_CHECK_LABEL(m_control->Stop(m_delegate->m_device +diff --git a/xbmc/network/upnp/UPnPPlayer.h b/xbmc/network/upnp/UPnPPlayer.h +index 61e31ee..b8c721c 100644 +--- a/xbmc/network/upnp/UPnPPlayer.h ++++ b/xbmc/network/upnp/UPnPPlayer.h +@@ -37,7 +37,7 @@ class CUPnPPlayer + + virtual bool OpenFile(const CFileItem& file, const CPlayerOptions& options); + virtual bool QueueNextFile(const CFileItem &file); +- virtual bool CloseFile(); ++ virtual bool CloseFile(bool reopen = false); + virtual bool IsPlaying() const; + virtual void Pause(); + virtual bool IsPaused() const; +-- +1.8.5.1 + + +From ee43944e1cd6231de3e02ba9111c77b8bebd30c8 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Thu, 5 Dec 2013 14:18:32 +0100 +Subject: [PATCH 91/93] paplayer: instruct AE to keep configuration when + skipping tracks + +--- + xbmc/cores/paplayer/PAPlayer.cpp | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/xbmc/cores/paplayer/PAPlayer.cpp b/xbmc/cores/paplayer/PAPlayer.cpp +index 13339f4..3c53a6d 100644 +--- a/xbmc/cores/paplayer/PAPlayer.cpp ++++ b/xbmc/cores/paplayer/PAPlayer.cpp +@@ -511,6 +511,9 @@ inline bool PAPlayer::PrepareStream(StreamInfo *si) + + bool PAPlayer::CloseFile(bool reopen) + { ++ if (reopen) ++ CAEFactory::KeepConfiguration(3000); ++ + if (!m_isPaused) + SoftStop(true, true); + CloseAllStreams(false); +-- +1.8.5.1 + + +From e7b170c28b8febccd6e8a142105f565dd6bf50b0 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Thu, 5 Dec 2013 14:19:10 +0100 +Subject: [PATCH 92/93] AE: add interface method KeepConfiguration + +--- + xbmc/cores/AudioEngine/AEFactory.cpp | 6 ++++++ + xbmc/cores/AudioEngine/AEFactory.h | 1 + + .../cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 21 +++++++++++++++++++-- + xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h | 3 +++ + xbmc/cores/AudioEngine/Interfaces/AE.h | 6 ++++++ + 5 files changed, 35 insertions(+), 2 deletions(-) + +diff --git a/xbmc/cores/AudioEngine/AEFactory.cpp b/xbmc/cores/AudioEngine/AEFactory.cpp +index c03b439..e798e0f 100644 +--- a/xbmc/cores/AudioEngine/AEFactory.cpp ++++ b/xbmc/cores/AudioEngine/AEFactory.cpp +@@ -439,3 +439,9 @@ bool CAEFactory::IsSettingVisible(const std::string &condition, const std::strin + + return AE->IsSettingVisible(value); + } ++ ++void CAEFactory::KeepConfiguration(unsigned int millis) ++{ ++ if (AE) ++ AE->KeepConfiguration(millis); ++} +diff --git a/xbmc/cores/AudioEngine/AEFactory.h b/xbmc/cores/AudioEngine/AEFactory.h +index 745ddc1..cb5317e 100644 +--- a/xbmc/cores/AudioEngine/AEFactory.h ++++ b/xbmc/cores/AudioEngine/AEFactory.h +@@ -76,6 +76,7 @@ class CAEFactory + static void SettingOptionsAudioQualityLevelsFiller(const CSetting *setting, std::vector< std::pair > &list, int ¤t); + static void SettingOptionsAudioStreamsilenceFiller(const CSetting *setting, std::vector< std::pair > &list, int ¤t); + static bool IsSettingVisible(const std::string &condition, const std::string &value, const std::string &settingId); ++ static void KeepConfiguration(unsigned int millis); + + static void RegisterAudioCallback(IAudioCallback* pCallback); + static void UnregisterAudioCallback(); diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp -index 6443a2a..2bcfd68 100644 +index 73d6597..f77409d 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp -@@ -99,7 +99,7 @@ float CEngineStats::GetDelay(CActiveAEStream *stream) - if (delay < 0) - delay = 0.0; +@@ -231,6 +231,9 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg) + case CActiveAEControlProtocol::MUTE: + m_muted = *(bool*)msg->data; + return; ++ case CActiveAEControlProtocol::KEEPCONFIG: ++ m_extKeepConfig = *(unsigned int*)msg->data; ++ return; + default: + break; + } +@@ -540,7 +543,10 @@ void CActiveAE::StateMachine(int signal, Protocol *port, Message *msg) + DiscardStream(stream); + if (m_streams.empty()) + { +- m_extDrainTimer.Set(m_stats.GetDelay() * 1000); ++ if (m_extKeepConfig) ++ m_extDrainTimer.Set(m_extKeepConfig); ++ else ++ m_extDrainTimer.Set(m_stats.GetDelay() * 1000); + m_extDrain = true; + } + m_extTimeout = 0; +@@ -719,6 +725,7 @@ void CActiveAE::Process() + m_bStateMachineSelfTrigger = false; + m_extDrain = false; + m_extDeferData = false; ++ m_extKeepConfig = 0; -- delay += stream->m_bufferedTime; -+ delay += stream->m_bufferedTime / stream->m_streamResampleRatio; - return delay; + // start sink + m_sink.Start(); +@@ -851,9 +858,11 @@ void CActiveAE::Configure(AEAudioFormat *desiredFmt) + AEAudioFormat oldInternalFormat = m_internalFormat; + + inputFormat = GetInputFormat(desiredFmt); +- ++ + m_sinkRequestFormat = inputFormat; + ApplySettingsToFormat(m_sinkRequestFormat, m_settings, (int*)&m_mode); ++ m_extKeepConfig = 0; ++ + std::string device = AE_IS_RAW(m_sinkRequestFormat.m_dataFormat) ? m_settings.passthoughdevice : m_settings.device; + std::string driver; + CAESinkFactory::ParseDevice(device, driver); +@@ -1269,6 +1278,7 @@ void CActiveAE::ChangeResamplers() + + void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &settings, int *mode) + { ++ int oldMode = m_mode; + if (mode) + *mode = MODE_PCM; + +@@ -1329,6 +1339,8 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett + + if (m_settings.config == AE_CONFIG_FIXED || (settings.stereoupmix && format.m_channelLayout.Count() <= 2)) + format.m_channelLayout = stdLayout; ++ else if (m_extKeepConfig && (settings.config == AE_CONFIG_AUTO) && (oldMode != MODE_RAW)) ++ format.m_channelLayout = m_internalFormat.m_channelLayout; + else + format.m_channelLayout.ResolveChannels(stdLayout); + } +@@ -2237,6 +2249,11 @@ void CActiveAE::SetSoundMode(const int mode) + m_controlPort.SendOutMessage(CActiveAEControlProtocol::SOUNDMODE, &soundmode, sizeof(int)); } -diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp -index d5b01ea..9914e9e 100644 ---- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp -+++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp -@@ -56,6 +56,7 @@ - m_leftoverBuffer = new uint8_t[m_format.m_frameSize]; - m_leftoverBytes = 0; - m_forceResampler = false; -+ m_streamResampleRatio = 1.0; - } ++void CActiveAE::KeepConfiguration(unsigned int millis) ++{ ++ unsigned int timeMs = millis; ++ m_controlPort.SendOutMessage(CActiveAEControlProtocol::KEEPCONFIG, &timeMs, sizeof(unsigned int)); ++} + + void CActiveAE::OnLostDevice() + { +diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h +index 2955bb8..0e22a2e 100644 +--- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h ++++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h +@@ -86,6 +86,7 @@ class CActiveAEControlProtocol : public Protocol + GETSTATE, + DISPLAYLOST, + DISPLAYRESET, ++ KEEPCONFIG, + TIMEOUT, + }; + enum InSignal +@@ -219,6 +220,7 @@ class CActiveAE : public IAE, private CThread + virtual bool SupportsSilenceTimeout(); + virtual bool SupportsQualityLevel(enum AEQuality level); + virtual bool IsSettingVisible(const std::string &settingId); ++ virtual void KeepConfiguration(unsigned int millis); + + virtual void RegisterAudioCallback(IAudioCallback* pCallback); + virtual void UnregisterAudioCallback(); +@@ -286,6 +288,7 @@ class CActiveAE : public IAE, private CThread + bool m_extError; + bool m_extDrain; + XbmcThreads::EndTime m_extDrainTimer; ++ unsigned int m_extKeepConfig; + bool m_extDeferData; + + enum +diff --git a/xbmc/cores/AudioEngine/Interfaces/AE.h b/xbmc/cores/AudioEngine/Interfaces/AE.h +index d2f895c..f91dc4c 100644 +--- a/xbmc/cores/AudioEngine/Interfaces/AE.h ++++ b/xbmc/cores/AudioEngine/Interfaces/AE.h +@@ -226,5 +226,11 @@ class IAE + * @return true if AudioEngine wants to display this setting + */ + virtual bool IsSettingVisible(const std::string &settingId) {return false; } ++ ++ /** ++ * Instruct AE to keep configuration for a specified time ++ * @param millis time for which old configuration should be kept ++ */ ++ virtual void KeepConfiguration(unsigned int millis) {return; } + }; - CActiveAEStream::~CActiveAEStream() -- -1.8.5-rc3 +1.8.5.1 + + +From a428468febfb169f5c0e54ce27b93d5b9ff2f884 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Mon, 9 Dec 2013 13:01:38 +0100 +Subject: [PATCH 93/93] LinuxRendererGL: make sure we have a shader defined + +--- + xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 9 +++++++++ + .../VideoShaders/VideoFilterShader.cpp | 22 ++++++++++++++++++++++ + .../VideoShaders/VideoFilterShader.h | 7 +++++++ + 3 files changed, 38 insertions(+) + +diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +index 801ecb2..0c1d6e2 100644 +--- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp ++++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +@@ -830,6 +830,15 @@ void CLinuxRendererGL::UpdateVideoFilter() + break; + } + } ++ else ++ { ++ m_pVideoFilterShader = new DefaultFilterShader(); ++ if (!m_pVideoFilterShader->CompileAndLink()) ++ { ++ CLog::Log(LOGERROR, "GL: Error compiling and linking video filter shader"); ++ break; ++ } ++ } + return; + + case VS_SCALINGMETHOD_LANCZOS2: +diff --git a/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.cpp b/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.cpp +index 7dc5014..8c2c3e0 100644 +--- a/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.cpp ++++ b/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.cpp +@@ -65,6 +65,16 @@ + "gl_FrontColor = gl_Color;" + "}"; + VertexShader()->SetSource(shaderv); ++ ++ string shaderp = ++ "uniform sampler2D img;" ++ "varying vec2 cord;" ++ "void main()" ++ "{" ++ "gl_FragColor.rgb = texture2D(img, cord).rgb;" ++ "gl_FragColor.a = gl_Color.a;" ++ "}"; ++ PixelShader()->SetSource(shaderp); + } + + ConvolutionFilterShader::ConvolutionFilterShader(ESCALINGMETHOD method, bool stretch) +@@ -230,4 +240,16 @@ bool StretchFilterShader::OnEnabled() + return true; + } + ++void DefaultFilterShader::OnCompiledAndLinked() ++{ ++ m_hSourceTex = glGetUniformLocation(ProgramHandle(), "img"); ++} ++ ++bool DefaultFilterShader::OnEnabled() ++{ ++ glUniform1i(m_hSourceTex, m_sourceTexUnit); ++ VerifyGLState(); ++ return true; ++} ++ + #endif +diff --git a/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.h b/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.h +index 2473da7..a489865 100644 +--- a/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.h ++++ b/xbmc/cores/VideoRenderers/VideoShaders/VideoFilterShader.h +@@ -87,6 +87,13 @@ + bool OnEnabled(); + }; + ++ class DefaultFilterShader : public BaseVideoFilterShader ++ { ++ public: ++ void OnCompiledAndLinked(); ++ bool OnEnabled(); ++ }; ++ + } // end namespace + + #endif +-- +1.8.5.1 diff --git a/packages/mediacenter/xbmc/patches/xbmc-999.03-PR3794.patch b/packages/mediacenter/xbmc/patches/xbmc-999.03-PR3794.patch new file mode 100644 index 0000000000..ae45733fe0 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-999.03-PR3794.patch @@ -0,0 +1,131 @@ +From 8553aa315efff535e51c4f91024a7e2f8a6ecb4a Mon Sep 17 00:00:00 2001 +From: xhaggi +Date: Mon, 9 Dec 2013 15:25:11 +0100 +Subject: [PATCH] [pvr] observe PVRManager state to trigger epg create + +--- + xbmc/pvr/PVRManager.cpp | 3 +++ + xbmc/pvr/PVRManager.h | 3 ++- + xbmc/pvr/channels/PVRChannelGroupInternal.cpp | 16 +++++++++++++++- + xbmc/pvr/channels/PVRChannelGroupInternal.h | 5 ++++- + xbmc/utils/Observer.h | 1 + + 5 files changed, 25 insertions(+), 3 deletions(-) + +diff --git a/xbmc/pvr/PVRManager.cpp b/xbmc/pvr/PVRManager.cpp +index 81d81c2..6080507 100644 +--- a/xbmc/pvr/PVRManager.cpp ++++ b/xbmc/pvr/PVRManager.cpp +@@ -395,6 +395,9 @@ void CPVRManager::SetState(ManagerState state) + { + CSingleLock lock(m_managerStateMutex); + m_managerState = state; ++ SetChanged(); ++ ++ NotifyObservers(ObservableMessageManagerStateChanged); + } + + void CPVRManager::Process(void) +diff --git a/xbmc/pvr/PVRManager.h b/xbmc/pvr/PVRManager.h +index 7038410..5359c05 100644 +--- a/xbmc/pvr/PVRManager.h ++++ b/xbmc/pvr/PVRManager.h +@@ -26,6 +26,7 @@ + #include "threads/Event.h" + #include "threads/Thread.h" + #include "utils/JobManager.h" ++#include "utils/Observer.h" + + class CGUIDialogProgressBarHandle; + class CStopWatch; +@@ -83,7 +84,7 @@ + + typedef boost::shared_ptr CPVRChannelGroupPtr; + +- class CPVRManager : public ISettingCallback, private CThread ++ class CPVRManager : public ISettingCallback, private CThread, public Observable + { + friend class CPVRClients; + +diff --git a/xbmc/pvr/channels/PVRChannelGroupInternal.cpp b/xbmc/pvr/channels/PVRChannelGroupInternal.cpp +index 0bb07d2..1d292c9 100644 +--- a/xbmc/pvr/channels/PVRChannelGroupInternal.cpp ++++ b/xbmc/pvr/channels/PVRChannelGroupInternal.cpp +@@ -53,6 +53,8 @@ + CPVRChannelGroupInternal::~CPVRChannelGroupInternal(void) + { + Unload(); ++ if (Observer::IsObserving(g_PVRManager)) ++ g_PVRManager.UnregisterObserver(this); + } + + bool CPVRChannelGroupInternal::Load(void) +@@ -60,7 +62,10 @@ bool CPVRChannelGroupInternal::Load(void) + if (CPVRChannelGroup::Load()) + { + UpdateChannelPaths(); +- g_PVRManager.TriggerEpgsCreate(); ++ ++ if (!Observer::IsObserving(g_PVRManager)) ++ g_PVRManager.RegisterObserver(this); ++ + return true; + } + +@@ -385,3 +390,12 @@ bool CPVRChannelGroupInternal::CreateChannelEpgs(bool bForce /* = false */) + + return true; + } ++ ++void CPVRChannelGroupInternal::Notify(const Observable &obs, const ObservableMessage msg) ++{ ++ if (msg == ObservableMessageManagerStateChanged) ++ { ++ if(g_PVRManager.IsStarted()) ++ g_PVRManager.TriggerEpgsCreate(); ++ } ++} +diff --git a/xbmc/pvr/channels/PVRChannelGroupInternal.h b/xbmc/pvr/channels/PVRChannelGroupInternal.h +index cba4180..10f728a 100644 +--- a/xbmc/pvr/channels/PVRChannelGroupInternal.h ++++ b/xbmc/pvr/channels/PVRChannelGroupInternal.h +@@ -21,6 +21,7 @@ + */ + + #include "PVRChannelGroup.h" ++#include "utils/Observer.h" + + namespace PVR + { +@@ -29,7 +30,7 @@ + + /** XBMC's internal group, the group containing all channels */ + +- class CPVRChannelGroupInternal : public CPVRChannelGroup ++ class CPVRChannelGroupInternal : public CPVRChannelGroup, public Observer + { + friend class CPVRChannelGroups; + friend class CPVRDatabase; +@@ -45,6 +46,8 @@ + + virtual ~CPVRChannelGroupInternal(void); + ++ virtual void Notify(const Observable &obs, const ObservableMessage msg); ++ + /** + * @brief The amount of channels in this container. + * @return The amount of channels in this container. +diff --git a/xbmc/utils/Observer.h b/xbmc/utils/Observer.h +index 291d86b..3ac032a 100644 +--- a/xbmc/utils/Observer.h ++++ b/xbmc/utils/Observer.h +@@ -40,6 +40,7 @@ + ObservableMessageTimersReset, + ObservableMessageRecordings, + ObservableMessagePeripheralsChanged, ++ ObservableMessageManagerStateChanged + } ObservableMessage; + + class Observer +-- +1.8.5.1 +