From 236bf4e33893154d9937a20bf0e8bf12dcb4139e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 21 Aug 2014 14:00:35 +0200 Subject: [PATCH] xbmc: update FM support patch Signed-off-by: Stephan Raue --- .../patches/xbmc-995.01-fernetmenta.patch | 744 ++++++++++-------- 1 file changed, 396 insertions(+), 348 deletions(-) diff --git a/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta.patch b/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta.patch index f11e816f06..53fe002020 100644 --- a/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta.patch +++ b/packages/mediacenter/xbmc/patches/xbmc-995.01-fernetmenta.patch @@ -1,7 +1,7 @@ -From 76ab0798d892cc9d88d6c4670037bd5a2fa13170 Mon Sep 17 00:00:00 2001 +From 70133bf136174bf3c818968f5375c72840292f6e Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:34:39 +0200 -Subject: [PATCH 01/29] videoplayer: adapt lateness detection and dropping to +Subject: [PATCH 01/27] videoplayer: adapt lateness detection and dropping to buffering --- @@ -643,13 +643,13 @@ index 37a37c4..be14832 100644 }; -- -2.0.3 +2.0.4 -From 07fbf031c0935604ddff11462ba527dd2d1ae60c Mon Sep 17 00:00:00 2001 +From 86e4f2c78fc0475d19b5b1fe2825940b0a7f5196 Mon Sep 17 00:00:00 2001 From: xbmc Date: Sun, 2 Sep 2012 16:05:21 +0200 -Subject: [PATCH 02/29] video player: present correct pts to user for a/v sync +Subject: [PATCH 02/27] video player: present correct pts to user for a/v sync (after buffering in renderer) --- @@ -698,13 +698,13 @@ index be14832..ad99987 100644 double GetOutputDelay(); /* returns the expected delay, from that a packet is put in queue */ std::string GetPlayerInfo(); -- -2.0.3 +2.0.4 -From ffa44453ec28eabc536783ddcbb23c912f8a0d43 Mon Sep 17 00:00:00 2001 +From 5464634530899d3aa6d09896973de14f27803c66 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 1 Jun 2013 11:21:19 +0200 -Subject: [PATCH 03/29] renderer: bump buffers to 5 +Subject: [PATCH 03/27] renderer: bump buffers to 5 --- xbmc/cores/VideoRenderers/BaseRenderer.h | 2 +- @@ -724,13 +724,13 @@ index fb41ccf..f5e5677 100644 class CSetting; -- -2.0.3 +2.0.4 -From 2a01b6c64a4c4d35af8c1f3276a276a891c0257c Mon Sep 17 00:00:00 2001 +From 9e1ee4811b9e3b6fd1e3fe2982f6622ee619bb79 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:41:31 +0200 -Subject: [PATCH 04/29] videoplayer: update frametime, it might change due to +Subject: [PATCH 04/27] videoplayer: update frametime, it might change due to fps detection --- @@ -751,13 +751,13 @@ index 1e70fca..5761270 100644 { m_codecname = m_pVideoCodec->GetName(); -- -2.0.3 +2.0.4 -From 27a5520d07a0be56d803acec4470026d69f1ff65 Mon Sep 17 00:00:00 2001 +From 7bc57e1e4b7a9b50dc2fce152abb5586fe615cb8 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:43:06 +0200 -Subject: [PATCH 05/29] videoplayer: give streams with invalid fps a chance for +Subject: [PATCH 05/27] videoplayer: give streams with invalid fps a chance for fps detection --- @@ -778,13 +778,13 @@ index 5761270..e8d855f 100644 //reset the stored framerates if no good framerate was detected m_fStableFrameRate = 0.0; -- -2.0.3 +2.0.4 -From 847e1bdcbe267c1ab3df144b099f5a34f85d7e7e Mon Sep 17 00:00:00 2001 +From 27bf5d17b0bd4890d7f25c8381ff32740b8dffd5 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 28 May 2012 10:49:05 +0200 -Subject: [PATCH 06/29] dvdplayer: allow rewinding at end of stream, do a seek +Subject: [PATCH 06/27] dvdplayer: allow rewinding at end of stream, do a seek after rewind --- @@ -792,7 +792,7 @@ Subject: [PATCH 06/29] dvdplayer: allow rewinding at end of stream, do a seek 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index cbdd299..d3a4c59 100644 +index 8de1e96..19e90f5 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -1583,7 +1583,7 @@ void CDVDPlayer::HandlePlaySpeed() @@ -818,13 +818,13 @@ index cbdd299..d3a4c59 100644 // audioplayer, stops outputing audio to audiorendere, but still tries to // sleep an correct amount for each packet -- -2.0.3 +2.0.4 -From ac57132360155e0a3413a86a393c98e4d2d39e8d Mon Sep 17 00:00:00 2001 +From 08fb3a8634c2a644e9059aaf0fc5257ad237f558 Mon Sep 17 00:00:00 2001 From: xbmc Date: Mon, 20 Aug 2012 16:06:39 +0200 -Subject: [PATCH 07/29] dvdplayer: observe pts counter overflow +Subject: [PATCH 07/27] dvdplayer: observe pts counter overflow --- .../cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 197 ++++++++++++++++++++- @@ -1104,13 +1104,13 @@ index 08eb3df..dd89584 100644 }; -- -2.0.3 +2.0.4 -From 22e04d92889520d877092a3c02a6d8a1e4abc22a Mon Sep 17 00:00:00 2001 +From 4169f8e73a7663a1709eb8a7770359e527046d2d Mon Sep 17 00:00:00 2001 From: xbmc Date: Tue, 2 Oct 2012 13:02:10 +0200 -Subject: [PATCH 08/29] dvdplayer: avoid short screen flicker caused by +Subject: [PATCH 08/27] dvdplayer: avoid short screen flicker caused by unnecessary reconfigure of renderer --- @@ -1140,13 +1140,13 @@ index e8d855f..5bff37e 100644 || ( m_output.extended_format != pPicture->extended_format ) || ( m_output.color_matrix != pPicture->color_matrix && pPicture->color_matrix != 0 ) // don't reconfigure on unspecified -- -2.0.3 +2.0.4 -From 35fd541fc74eecbbe863aca40dc6b72049ed53e3 Mon Sep 17 00:00:00 2001 +From 21d1f62dad833faf01100a31e4ecc2a3eae98488 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 11 Oct 2012 12:05:50 +0200 -Subject: [PATCH 09/29] vdpau: advanced settings for auto deinterlacing +Subject: [PATCH 09/27] vdpau: advanced settings for auto deinterlacing --- xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 8 ++++---- @@ -1209,13 +1209,13 @@ index 7e50a63..980138e 100644 bool m_videoVDPAUdeintSkipChromaHD; bool m_musicUseTimeSeeking; -- -2.0.3 +2.0.4 -From 72b43360d875a817e70aaa9f4b1dbe43870d8725 Mon Sep 17 00:00:00 2001 +From 63db87d23949258ffebbd75780f62c9b0e93d840 Mon Sep 17 00:00:00 2001 From: xbmc Date: Fri, 2 Nov 2012 13:20:03 +0100 -Subject: [PATCH 10/29] player: fix rewind +Subject: [PATCH 10/27] player: fix rewind --- xbmc/cores/dvdplayer/DVDMessage.h | 5 ++++- @@ -1263,7 +1263,7 @@ index a365821..07366df 100644 class CDVDMsgPlayerSeekChapter : public CDVDMsg diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index d3a4c59..09ba292 100644 +index 19e90f5..4c4de1b 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -1584,11 +1584,13 @@ void CDVDPlayer::HandlePlaySpeed() @@ -1321,7 +1321,7 @@ index d3a4c59..09ba292 100644 } // if playspeed is different then DVD_PLAYSPEED_NORMAL or DVD_PLAYSPEED_PAUSE -@@ -3096,7 +3100,7 @@ void CDVDPlayer::UpdateClockMaster() +@@ -3106,7 +3110,7 @@ void CDVDPlayer::UpdateClockMaster() } } @@ -1330,7 +1330,7 @@ index d3a4c59..09ba292 100644 { double startpts; if(accurate) -@@ -3108,19 +3112,23 @@ void CDVDPlayer::FlushBuffers(bool queued, double pts, bool accurate) +@@ -3118,19 +3122,23 @@ void CDVDPlayer::FlushBuffers(bool queued, double pts, bool accurate) if(startpts != DVD_NOPTS_VALUE) startpts -= m_offset_pts; @@ -1358,7 +1358,7 @@ index d3a4c59..09ba292 100644 m_CurrentTeletext.dts = DVD_NOPTS_VALUE; m_CurrentTeletext.startpts = startpts; -@@ -3164,7 +3172,7 @@ void CDVDPlayer::FlushBuffers(bool queued, double pts, bool accurate) +@@ -3174,7 +3182,7 @@ void CDVDPlayer::FlushBuffers(bool queued, double pts, bool accurate) m_CurrentTeletext.started = false; } @@ -1427,20 +1427,20 @@ index ad99987..4d2b2c7 100644 unsigned int m_dropRequests; }; -- -2.0.3 +2.0.4 -From f2652092eb3a360a3f55165bc418a771045e4800 Mon Sep 17 00:00:00 2001 +From 2ff037346ebe6fa3e88c9dfc87e86366a1215fe5 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 15:18:53 +0100 -Subject: [PATCH 11/29] OMXPlayer: some caching fixes for pvr +Subject: [PATCH 11/27] OMXPlayer: some caching fixes for pvr --- xbmc/cores/omxplayer/OMXPlayer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp -index e7a39fa..a62b874 100644 +index 53fe37d..182314f 100644 --- a/xbmc/cores/omxplayer/OMXPlayer.cpp +++ b/xbmc/cores/omxplayer/OMXPlayer.cpp @@ -2467,7 +2467,8 @@ void CDVDPlayer::HandleMessages() @@ -1454,20 +1454,20 @@ index e7a39fa..a62b874 100644 m_av_clock.OMXSetSpeed(speed); m_av_clock.OMXPause(); -- -2.0.3 +2.0.4 -From a22b3c30ef8f06e805b093472e11842254c70ee6 Mon Sep 17 00:00:00 2001 +From 0cb3e855ba5bf266800638bff95673ba07d66ce0 Mon Sep 17 00:00:00 2001 From: xbmc Date: Thu, 28 Mar 2013 20:50:59 +0100 -Subject: [PATCH 12/29] fix incorrect display of fps when dr kicks in +Subject: [PATCH 12/27] 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 f6b2901..5806613 100644 +index 479b54a..6ef5bdb 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -2325,10 +2325,11 @@ void CApplication::Render() @@ -1484,13 +1484,13 @@ index f6b2901..5806613 100644 g_renderManager.UpdateResolution(); -- -2.0.3 +2.0.4 -From 783a2a03f1b0310e5f6111688089dd4a877c9cab Mon Sep 17 00:00:00 2001 +From ca506bac9c8d77fba0bf3baaf819c06510347855 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Thu, 25 Jul 2013 17:18:13 +0200 -Subject: [PATCH 13/29] ActiveAE: slightly reduce buffer size +Subject: [PATCH 13/27] ActiveAE: slightly reduce buffer size --- xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 4 ++-- @@ -1512,13 +1512,13 @@ index fe5e893..c98c73b 100644 void CEngineStats::Reset(unsigned int sampleRate) -- -2.0.3 +2.0.4 -From 9820e693530dfbc3b90370b172a61c82c37407f5 Mon Sep 17 00:00:00 2001 +From 443859e498d3d2037d61cd465ae4694406c40350 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 4 Aug 2013 10:11:16 +0200 -Subject: [PATCH 14/29] Revert "vdpau: comment some features that will be added +Subject: [PATCH 14/27] Revert "vdpau: comment some features that will be added later" This reverts commit e00b4f65864d623ab4d2e9e5c06db138e661f1cf. @@ -1571,13 +1571,13 @@ index 1845198..2bfea1a 100644 m_mixersteps = 1; } -- -2.0.3 +2.0.4 -From 446504baf09f947a7670c2706761d27586898eb9 Mon Sep 17 00:00:00 2001 +From b50aafc6c1f7e8d6a345cd98a4b5aae527838c1d Mon Sep 17 00:00:00 2001 From: Marcel Groothuis Date: Thu, 5 Dec 2013 22:02:50 +0100 -Subject: [PATCH 15/29] ffmpeg demuxer: faster channel change for PVR addons +Subject: [PATCH 15/27] ffmpeg demuxer: faster channel change for PVR addons without internal demuxing (such as MediaPortal, ArgusTV, MythTV, NextPVR) Credits: FernetMenta, Davilla, Popcornmix, Whaupt @@ -1934,13 +1934,13 @@ index ca689d0..f383563 100644 else return NULL; -- -2.0.3 +2.0.4 -From 3cb4c370b2313afc7e2aafea16dd0550f194f22a Mon Sep 17 00:00:00 2001 +From 4185f173f2510099f3236521ddc473a1b04c3c1b Mon Sep 17 00:00:00 2001 From: Wolfgang Haupt Date: Thu, 5 Dec 2013 22:11:57 +0100 -Subject: [PATCH 16/29] DVDFactoryDemuxer: skip streaminfo for udp tcp and +Subject: [PATCH 16/27] DVDFactoryDemuxer: skip streaminfo for udp tcp and pvr-channels --- @@ -2061,13 +2061,106 @@ index 667f6d3..0094709 100644 static void AddSlashAtEnd(std::string& strFolder); static bool HasSlashAtEnd(const std::string& strFile, bool checkURL = false); -- -2.0.3 +2.0.4 -From 2971c70d1eca1d4dab05b85066beb2dc285ddd33 Mon Sep 17 00:00:00 2001 +From 4ca1fb51808a11555862a5fec00b8e133e7c9bd3 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Fri, 18 Jul 2014 10:39:07 +0200 +Subject: [PATCH 17/27] fast channel switch, make sure extradata is decoded + +--- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index c01bc11..d38bfab 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -1767,7 +1767,8 @@ void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) + // We don't need to actually decode here + // we just want to transport SPS data into codec context + st->codec->skip_idct = AVDISCARD_ALL; +- st->codec->skip_frame = AVDISCARD_ALL; ++ // extradata is not decoded if skip_frame >= AVDISCARD_NONREF ++// st->codec->skip_frame = AVDISCARD_ALL; + st->codec->skip_loop_filter = AVDISCARD_ALL; + + // We are looking for an IDR frame +-- +2.0.4 + + +From 4a55e426e089da56d299bb2b2fd5cc21933856d5 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Wed, 23 Jul 2014 15:07:37 +0200 +Subject: [PATCH 18/27] ffmpeg demuxer: allow a stream change if pat/pmt was + not seen on open + +--- + xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +index d38bfab..2332b1b 100644 +--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp ++++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +@@ -408,10 +408,12 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + if (iformat && (strcmp(iformat->name, "mjpeg") == 0) && m_ioContext->seekable == 0) + av_opt_set_int(m_pFormatContext, "analyzeduration", 500000, 0); + ++ bool isMpegts = false; + if (iformat && (strcmp(iformat->name, "mpegts") == 0)) + { + m_pFormatContext->max_analyze_duration = 500000; + m_checkvideo = true; ++ isMpegts = true; + } + + // we need to know if this is matroska or avi later +@@ -466,7 +468,13 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + + UpdateCurrentPTS(); + +- CreateStreams(); ++ // in case of mpegts and we have not seen pat/pmt, defer creation of streams ++ if (!isMpegts || m_pFormatContext->nb_programs > 0) ++ CreateStreams(); ++ ++ // allow IsProgramChange to return true ++ if (isMpegts && GetNrOfStreams() == 0) ++ m_program = 0; + + m_bPtsWrapChecked = false; + m_bPtsWrap = false; +@@ -1657,6 +1665,9 @@ bool CDVDDemuxFFmpeg::IsProgramChange() + if (m_program == UINT_MAX) + return false; + ++ if (m_program == 0 && !m_pFormatContext->nb_programs) ++ return false; ++ + if(m_pFormatContext->programs[m_program]->nb_stream_indexes != m_streams.size()) + return true; + +@@ -1792,6 +1803,9 @@ bool CDVDDemuxFFmpeg::IsVideoReady() + if(!m_checkvideo) + return true; + ++ if (m_program == 0 && !m_pFormatContext->nb_programs) ++ return false; ++ + if(m_program != UINT_MAX) + { + for (unsigned int i = 0; i < m_pFormatContext->programs[m_program]->nb_stream_indexes; i++) +-- +2.0.4 + + +From d1a4921fd94a103872ba36e3b0b5bc8a819d6ba1 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sun, 22 Dec 2013 14:52:29 +0100 -Subject: [PATCH 17/29] linux: add shared lib for sse4 operations +Subject: [PATCH 19/27] linux: add shared lib for sse4 operations --- Makefile.in | 8 ++- @@ -2082,7 +2175,7 @@ Subject: [PATCH 17/29] linux: add shared lib for sse4 operations create mode 100644 xbmc/linux/sse4/Makefile.in diff --git a/Makefile.in b/Makefile.in -index 433d5ba..1dd97ee 100644 +index 27a9de0..75d79a6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -320,6 +320,12 @@ CHECK_LIBADD=@WAYLAND_TEST_LIBS@ @@ -2359,13 +2452,13 @@ index 0000000..45aa826 + +include ../../../Makefile.include -- -2.0.3 +2.0.4 -From f968f07703a3ec188f91c9ceddd6e447a5f1fd9d Mon Sep 17 00:00:00 2001 +From d556061cc85aa4c3b064bcda63346715ddbb4bd5 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 28 Jan 2014 10:05:26 +0100 -Subject: [PATCH 18/29] xbmc pr 3080 +Subject: [PATCH 20/27] xbmc pr 3080 --- xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp | 8 ++++++++ @@ -2391,13 +2484,13 @@ index 6920db2..d72e256 100644 * Setting it correctly would allow CorePNG decoding. */ avpkt.flags = AV_PKT_FLAG_KEY; -- -2.0.3 +2.0.4 -From 8229ea333d85b17ab7bf00f7d869b7aa4f3af714 Mon Sep 17 00:00:00 2001 +From c4052186723660e1d15f5286bc1881bcc033a8d9 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 11 Feb 2014 18:15:06 +0100 -Subject: [PATCH 19/29] ActiveAE: add some debug logging +Subject: [PATCH 21/27] ActiveAE: add some debug logging --- xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEStream.cpp | 6 ++++++ @@ -2422,13 +2515,13 @@ index ec10397..3b67fc0 100644 return copied; } -- -2.0.3 +2.0.4 -From faa9ea7558c2519b001990a8ff2d9e4ce46bf0d6 Mon Sep 17 00:00:00 2001 +From bec0650784571cace17c909e4e2929c2e65793cd Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Fri, 13 Jun 2014 14:37:16 +0200 -Subject: [PATCH 20/29] vaapi - postprocessing +Subject: [PATCH 22/27] VAAPI: rewrite with VPP and ffmpeg filter --- configure.in | 16 +- @@ -2441,12 +2534,12 @@ Subject: [PATCH 20/29] vaapi - postprocessing .../VideoRenderers/VideoShaders/YUV2RGBShader.cpp | 5 +- .../dvdplayer/DVDCodecs/Video/DVDVideoCodec.h | 4 +- .../DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp | 21 +- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 3210 +++++++++++++++++--- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h | 539 +++- + xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 3240 +++++++++++++++++--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h | 540 +++- xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 1 + xbmc/settings/VideoSettings.h | 4 + xbmc/video/dialogs/GUIDialogVideoSettings.cpp | 3 + - 15 files changed, 3465 insertions(+), 674 deletions(-) + 15 files changed, 3499 insertions(+), 671 deletions(-) diff --git a/configure.in b/configure.in index 5eb8465..b4e4a5d 100644 @@ -3138,10 +3231,10 @@ index d72e256..a4ebcd8 100644 pDvdVideoPicture->pts = DVD_NOPTS_VALUE; diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -index e1637fa..e090768 100644 +index e1637fa..9aec0c9 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -@@ -22,534 +22,3010 @@ +@@ -22,534 +22,3046 @@ #include "windowing/WindowingFactory.h" #include "VAAPI.h" #include "DVDVideoCodec.h" @@ -3772,11 +3865,18 @@ index e1637fa..e090768 100644 - VAEntrypoint entrypoint = VAEntrypointVLD; - VAProfile profile; + CLog::Log(LOGDEBUG,"VAAPI - open decoder"); - -- CLog::Log(LOGDEBUG, "VAAPI - attempting to open codec %d with profile %d at level %d with %d reference frames", avctx->codec_id, avctx->profile, avctx->level, avctx->refs); ++ + if (!CVAAPIContext::EnsureContext(&m_vaapiConfig.context, this)) + return false; +- CLog::Log(LOGDEBUG, "VAAPI - attempting to open codec %d with profile %d at level %d with %d reference frames", avctx->codec_id, avctx->profile, avctx->level, avctx->refs); ++ if(avctx->coded_width == 0 ++ || avctx->coded_height == 0) ++ { ++ CLog::Log(LOGWARNING,"VAAPI::Open: no width/height available, can't init"); ++ return false; ++ } + - vector accepted; - switch (avctx->codec_id) { + m_vaapiConfig.vidWidth = avctx->width; @@ -4227,12 +4327,6 @@ index e1637fa..e090768 100644 + msg->Release(); } - return VC_FLUSHED; -- } -- -- if (!EnsureContext(avctx)) -- return VC_ERROR; -- -- m_holder.surface.reset(); + else if (m_vaapiOutput.m_controlPort.ReceiveInMessage(&msg)) + { + if (msg->signal == COutputControlProtocol::STATS) @@ -4258,8 +4352,10 @@ index e1637fa..e090768 100644 + if (retval & VC_PICTURE) + { + m_bufferStats.SetParams(0, m_codecControl); -+ } -+ + } + +- if (!EnsureContext(avctx)) +- return VC_ERROR; + if (!retval) + { + CLog::Log(LOGERROR, "VAAPI::%s - timed out waiting for output message - decoded: %d, proc: %d, has free surface: %s", @@ -4307,7 +4403,8 @@ index e1637fa..e090768 100644 + { + m_DisplayState = VAAPI_OPEN; + } -+ + +- m_holder.surface.reset(); + if (state == VAAPI_RESET) + return VC_FLUSHED; + else @@ -4666,7 +4763,8 @@ index e1637fa..e090768 100644 +} + +void COutput::OnExit() -+{ + { +- return m_renderbuffers_count; + CLog::Log(LOGNOTICE, "COutput::OnExit: Output Thread terminated"); +} + @@ -4784,6 +4882,7 @@ index e1637fa..e090768 100644 + Flush(); + ReleaseBufferPool(true); + msg->Reply(COutputControlProtocol::ACC); ++ m_state = O_TOP_UNCONFIGURED; + return; + default: + break; @@ -4963,8 +5062,7 @@ index e1637fa..e090768 100644 +} + +void COutput::Process() - { -- return m_renderbuffers_count; ++{ + Message *msg = NULL; + Protocol *port = NULL; + bool gotMsg; @@ -5178,12 +5276,18 @@ index e1637fa..e090768 100644 + m_pp->Init(method); + m_currentDiMethod = method; + } ++ else ++ { ++ delete m_pp; ++ m_pp = NULL; ++ } + } + } + // progressive + else + { -+ if (m_pp && !m_pp->Compatible(VS_INTERLACEMETHOD_NONE)) ++ method = VS_INTERLACEMETHOD_NONE; ++ if (m_pp && !m_pp->Compatible(method)) + { + delete m_pp; + m_pp = NULL; @@ -5191,16 +5295,27 @@ index e1637fa..e090768 100644 + } + if (!m_pp) + { -+ if (CSettings::Get().GetBool("videoplayer.prefervaapirender")) -+ m_pp = new CSkipPostproc(); -+ else ++ if (!CSettings::Get().GetBool("videoplayer.prefervaapirender")) + m_pp = new CFFmpegPostproc(); ++ else ++ m_pp = new CSkipPostproc(); + if (m_pp->PreInit(m_config)) + { -+ m_pp->Init(VS_INTERLACEMETHOD_NONE); ++ m_pp->Init(method); ++ } ++ else ++ { ++ delete m_pp; ++ m_pp = NULL; + } + } + } ++ if (!m_pp) // fallback ++ { ++ m_pp = new CSkipPostproc(); ++ if (m_pp->PreInit(m_config)) ++ m_pp->Init(method); ++ } +} + +CVaapiRenderPicture* COutput::ProcessPicture(CVaapiProcessedPicture &pic) @@ -5736,8 +5851,7 @@ index e1637fa..e090768 100644 + +bool CSkipPostproc::Compatible(EINTERLACEMETHOD method) +{ -+ if (method == VS_INTERLACEMETHOD_NONE && -+ CSettings::Get().GetBool("videoplayer.prefervaapirender")) ++ if (method == VS_INTERLACEMETHOD_NONE) + return true; + + return false; @@ -5838,11 +5952,11 @@ index e1637fa..e090768 100644 + } + else if (deinterlacingCaps[j].type == VAProcDeinterlacingMotionAdaptive) + { -+// methods->diMethods[methods->numDiMethods++] = VS_INTERLACEMETHOD_VAAPI_MADI; ++ methods->diMethods[methods->numDiMethods++] = VS_INTERLACEMETHOD_VAAPI_MADI; + } + else if (deinterlacingCaps[j].type == VAProcDeinterlacingMotionCompensated) + { -+// methods->diMethods[methods->numDiMethods++] = VS_INTERLACEMETHOD_VAAPI_MACI; ++ methods->diMethods[methods->numDiMethods++] = VS_INTERLACEMETHOD_VAAPI_MACI; + } + } + } @@ -5858,6 +5972,8 @@ index e1637fa..e090768 100644 + return false; +#else + ++ m_vppMethod = method; ++ + VAProcDeinterlacingType vppMethod = VAProcDeinterlacingNone; + switch (method) + { @@ -6055,7 +6171,10 @@ index e1637fa..e090768 100644 + return false; + } + -+ pipelineParams->filter_flags = (flags & VA_DEINTERLACING_BOTTOM_FIELD) ? VA_BOTTOM_FIELD : VA_TOP_FIELD; ++ if (m_vppMethod == VS_INTERLACEMETHOD_VAAPI_BOB) ++ pipelineParams->filter_flags = (flags & VA_DEINTERLACING_BOTTOM_FIELD) ? VA_BOTTOM_FIELD : VA_TOP_FIELD; ++ else ++ pipelineParams->filter_flags = 0; + pipelineParams->filters = &m_filter; + pipelineParams->num_filters = 1; + @@ -6216,6 +6335,13 @@ index e1637fa..e090768 100644 + CLog::Log(LOGNOTICE,"VAAPI::SupportsFilter failed loading sse4 lib"); + return false; + } ++ ++ // copying large surfaces via sse4 is a bit slow ++ // we just return false here as the primary use case the ++ // sse4 copy method is deinterlacing of max 1080i content ++ if (m_config.vidWidth > 1920 || m_config.vidHeight > 1088) ++ return false; ++ + VAImage image; + VASurfaceID surface = config.videoSurfaces->GetAtIndex(0); + VAStatus status = vaDeriveImage(config.dpy, surface, &image); @@ -6520,10 +6646,10 @@ index e1637fa..e090768 100644 #endif diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h -index ec99162..c6193b7 100644 +index ec99162..0c4fc62 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h -@@ -20,127 +20,516 @@ +@@ -20,127 +20,517 @@ #pragma once #include "system_gl.h" @@ -7081,6 +7207,7 @@ index ec99162..c6193b7 100644 + int m_forwardRefs, m_backwardRefs; + int m_currentIdx; + int m_frameCount; ++ EINTERLACEMETHOD m_vppMethod; +}; + +/** @@ -7157,209 +7284,13 @@ index 760eda5..965f297 100644 /* remove unsupported methods */ for (StaticIntegerSettingOptions::iterator it = entries.begin(); it != entries.end(); ) -- -2.0.3 +2.0.4 -From 6ac979f1e11340d140db678002eb5a8f1568c9c6 Mon Sep 17 00:00:00 2001 -From: fritsch -Date: Sun, 29 Jun 2014 14:45:28 +0200 -Subject: [PATCH 21/29] VAAPI: Don't use swfilter for large surfaces - fallback - to vaapi render - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 34 ++++++++++++++++++++++---- - 1 file changed, 29 insertions(+), 5 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -index e090768..3aec651 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -@@ -1688,12 +1688,18 @@ void COutput::InitCycle() - m_pp->Init(method); - m_currentDiMethod = method; - } -+ else -+ { -+ delete m_pp; -+ m_pp = NULL; -+ } - } - } - // progressive - else - { -- if (m_pp && !m_pp->Compatible(VS_INTERLACEMETHOD_NONE)) -+ method = VS_INTERLACEMETHOD_NONE; -+ if (m_pp && !m_pp->Compatible(method)) - { - delete m_pp; - m_pp = NULL; -@@ -1701,16 +1707,27 @@ void COutput::InitCycle() - } - if (!m_pp) - { -- if (CSettings::Get().GetBool("videoplayer.prefervaapirender")) -- m_pp = new CSkipPostproc(); -- else -+ if (!CSettings::Get().GetBool("videoplayer.prefervaapirender")) - m_pp = new CFFmpegPostproc(); -+ else -+ m_pp = new CSkipPostproc(); - if (m_pp->PreInit(m_config)) - { -- m_pp->Init(VS_INTERLACEMETHOD_NONE); -+ m_pp->Init(method); -+ } -+ else -+ { -+ delete m_pp; -+ m_pp = NULL; - } - } - } -+ if (!m_pp) // fallback -+ { -+ m_pp = new CSkipPostproc(); -+ if (m_pp->PreInit(m_config)) -+ m_pp->Init(method); -+ } - } - - CVaapiRenderPicture* COutput::ProcessPicture(CVaapiProcessedPicture &pic) -@@ -2726,6 +2743,13 @@ bool CFFmpegPostproc::PreInit(CVaapiConfig &config, SDiMethods *methods) - CLog::Log(LOGNOTICE,"VAAPI::SupportsFilter failed loading sse4 lib"); - return false; - } -+ -+ // copying large surfaces via sse4 is a bit slow -+ // we just return false here as the primary use case the -+ // sse4 copy method is deinterlacing of max 1080i content -+ if (m_config.vidWidth > 1920 || m_config.vidHeight > 1088) -+ return false; -+ - VAImage image; - VASurfaceID surface = config.videoSurfaces->GetAtIndex(0); - VAStatus status = vaDeriveImage(config.dpy, surface, &image); --- -2.0.3 - - -From a69d7c9a90f71029d5c6df037d9662411062c9a7 Mon Sep 17 00:00:00 2001 -From: fritsch -Date: Sun, 29 Jun 2014 16:21:44 +0200 -Subject: [PATCH 22/29] VAAPI: Fix fallback condition - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -index 3aec651..9cffd25 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -@@ -2263,8 +2263,7 @@ void CSkipPostproc::Flush() - - bool CSkipPostproc::Compatible(EINTERLACEMETHOD method) - { -- if (method == VS_INTERLACEMETHOD_NONE && -- CSettings::Get().GetBool("videoplayer.prefervaapirender")) -+ if (method == VS_INTERLACEMETHOD_NONE) - return true; - - return false; --- -2.0.3 - - -From b8251fccefb93347b52ea69fa076264656d211f9 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Fri, 18 Jul 2014 10:39:07 +0200 -Subject: [PATCH 23/29] fast channel switch, make sure extradata is decoded - ---- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index c01bc11..d38bfab 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -1767,7 +1767,8 @@ void CDVDDemuxFFmpeg::ParsePacket(AVPacket *pkt) - // We don't need to actually decode here - // we just want to transport SPS data into codec context - st->codec->skip_idct = AVDISCARD_ALL; -- st->codec->skip_frame = AVDISCARD_ALL; -+ // extradata is not decoded if skip_frame >= AVDISCARD_NONREF -+// st->codec->skip_frame = AVDISCARD_ALL; - st->codec->skip_loop_filter = AVDISCARD_ALL; - - // We are looking for an IDR frame --- -2.0.3 - - -From 9dd4997cadc85e9998e50094f7df1166c7f03891 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Mon, 21 Jul 2014 08:53:07 +0200 -Subject: [PATCH 24/29] vaapi: fix potential segfault, squash me later - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -index 9cffd25..7021031 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -@@ -1295,6 +1295,7 @@ void COutput::StateMachine(int signal, Protocol *port, Message *msg) - Flush(); - ReleaseBufferPool(true); - msg->Reply(COutputControlProtocol::ACC); -+ m_state = O_TOP_UNCONFIGURED; - return; - default: - break; --- -2.0.3 - - -From 27e84a033343e99678aee1a73a2ab6229eb01a78 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Wed, 23 Jul 2014 15:07:37 +0200 -Subject: [PATCH 26/29] ffmpeg demuxer: allow a stream change if pat/pmt was - not seen on open - ---- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index d38bfab..e388ecf 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -466,7 +466,13 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) - - UpdateCurrentPTS(); - -- CreateStreams(); -+ // in case of mpegts and we have not seen pat/pmt, defer creation of streams -+ if (!m_checkvideo || m_pFormatContext->nb_programs > 0) -+ CreateStreams(); -+ -+ // allow IsProgramChange to return true -+ if (m_checkvideo && GetNrOfStreams() == 0) -+ m_program = 0; - - m_bPtsWrapChecked = false; - m_bPtsWrap = false; --- -2.0.3 - - -From ae7212e3b10f2cbc800bcf463c47bdec346bc5aa Mon Sep 17 00:00:00 2001 +From 75b770fe37e7b2423ad538255a76b7cd313912f2 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Sat, 26 Jul 2014 09:54:06 +0200 -Subject: [PATCH 27/29] ffmpeg: adapt depreciated attribute +Subject: [PATCH 23/27] ffmpeg: adapt depreciated attribute max_analyze_duration --- @@ -7367,76 +7298,193 @@ Subject: [PATCH 27/29] ffmpeg: adapt depreciated attribute 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index e388ecf..a8e1f7a 100644 +index 2332b1b..edaa006 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -410,7 +410,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) - +@@ -411,7 +411,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput, bool streaminfo) + bool isMpegts = false; if (iformat && (strcmp(iformat->name, "mpegts") == 0)) { - m_pFormatContext->max_analyze_duration = 500000; + av_opt_set_int(m_pFormatContext, "analyzeduration", 500000, 0); m_checkvideo = true; + isMpegts = true; + } +-- +2.0.4 + + +From 479b5b0e385754c4a9db77ff2afc57a1efb2abc8 Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Sat, 16 Aug 2014 20:45:37 +0200 +Subject: [PATCH 24/27] ALSA: remove log spam by adding not ELD listed + passthrough formats after the pcm formats + +--- + xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp | 32 +++++++++++++++-------------- + 1 file changed, 17 insertions(+), 15 deletions(-) + +diff --git a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp +index 8dee4bc..b7411b8 100644 +--- a/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp ++++ b/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp +@@ -1343,21 +1343,6 @@ void CAESinkALSA::EnumerateDevice(AEDeviceInfoList &list, const std::string &dev + /* snd_hctl_close also closes ctlhandle */ + snd_hctl_close(hctl); + +- // regarding data formats we don't trust ELD +- // push all passthrough formats to the list +- AEDataFormatList::iterator it; +- for (enum AEDataFormat i = AE_FMT_MAX; i > AE_FMT_INVALID; i = (enum AEDataFormat)((int)i - 1)) +- { +- if (!AE_IS_RAW(i)) +- continue; +- it = find(info.m_dataFormats.begin(), info.m_dataFormats.end(), i); +- if (it == info.m_dataFormats.end()) +- { +- info.m_dataFormats.push_back(i); +- CLog::Log(LOGNOTICE, "CAESinkALSA::%s data format \"%s\" on device \"%s\" seems to be not supported.", __FUNCTION__, CAEUtil::DataFormatToStr(i), device.c_str()); +- } +- } +- + if (badHDMI) + { + /* +@@ -1501,6 +1486,23 @@ void CAESinkALSA::EnumerateDevice(AEDeviceInfoList &list, const std::string &dev + info.m_dataFormats.push_back(i); } --- -2.0.3 - - -From 3ecabf59bed6e257d8138424c0d0c6579cdc3fc7 Mon Sep 17 00:00:00 2001 -From: fritsch -Date: Sun, 10 Aug 2014 10:50:34 +0200 -Subject: [PATCH 28/29] VAAPI: Don't init if dimensions are not set - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -index 7021031..3321bcf 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp -@@ -464,6 +464,13 @@ bool CDecoder::Open(AVCodecContext* avctx, const enum PixelFormat fmt, unsigned - if (!CVAAPIContext::EnsureContext(&m_vaapiConfig.context, this)) - return false; - -+ if(avctx->coded_width == 0 -+ || avctx->coded_height == 0) ++ if (info.m_deviceType == AE_DEVTYPE_HDMI) + { -+ CLog::Log(LOGWARNING,"VAAPI::Open: no width/height available, can't init"); -+ return false; ++ // regarding data formats we don't trust ELD ++ // push all passthrough formats to the list ++ AEDataFormatList::iterator it; ++ for (enum AEDataFormat i = AE_FMT_MAX; i > AE_FMT_INVALID; i = (enum AEDataFormat)((int)i - 1)) ++ { ++ if (!AE_IS_RAW(i)) ++ continue; ++ it = find(info.m_dataFormats.begin(), info.m_dataFormats.end(), i); ++ if (it == info.m_dataFormats.end()) ++ { ++ info.m_dataFormats.push_back(i); ++ } ++ } + } + - m_vaapiConfig.vidWidth = avctx->width; - m_vaapiConfig.vidHeight = avctx->height; - m_vaapiConfig.outWidth = avctx->width; + snd_pcm_close(pcmhandle); + list.push_back(info); + } -- -2.0.3 +2.0.4 -From 93dfbdb3dbd56e1fc242ae3cd5e824946e5972ac Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Fri, 15 Aug 2014 15:35:39 +0200 -Subject: [PATCH 29/29] squash to 7e420ed9b3a3af29fe165e27782633a0d08c12f9 +From 380775a77d1de1ec145d98b4fe387b2688de89b2 Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Tue, 19 Aug 2014 00:53:17 +0100 +Subject: [PATCH 25/27] [dvdplayer] Allow UpdateCorrection to handle audio and + video jumping asynchronously --- - xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 3 +++ - 1 file changed, 3 insertions(+) + xbmc/cores/dvdplayer/DVDPlayer.cpp | 22 ++++++++++++++++------ + xbmc/cores/dvdplayer/DVDPlayer.h | 2 ++ + 2 files changed, 18 insertions(+), 6 deletions(-) -diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -index a8e1f7a..1adf796 100644 ---- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp -@@ -1663,6 +1663,9 @@ bool CDVDDemuxFFmpeg::IsProgramChange() - if (m_program == UINT_MAX) - return false; +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp +index 4c4de1b..a7f59c6 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp ++++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp +@@ -538,6 +538,8 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options) + m_State.Clear(); + m_UpdateApplication = 0; + m_offset_pts = 0; ++ m_CurrentAudio.correction = 0.0; ++ m_CurrentVideo.correction = 0.0; -+ if (m_program == 0 && !m_pFormatContext->nb_programs) -+ return false; -+ - if(m_pFormatContext->programs[m_program]->nb_stream_indexes != m_streams.size()) - return true; + m_PlayerOptions = options; + m_item = file; +@@ -1823,12 +1825,20 @@ void CDVDPlayer::CheckContinuity(CCurrentStream& current, DemuxPacket* pPacket) + if(correction != 0.0) + { +- /* disable detection on next packet on other stream to avoid ping pong-ing */ +- if(m_CurrentAudio.player != current.player) m_CurrentAudio.dts = DVD_NOPTS_VALUE; +- if(m_CurrentVideo.player != current.player) m_CurrentVideo.dts = DVD_NOPTS_VALUE; +- +- m_offset_pts += correction; +- UpdateCorrection(pPacket, correction); ++ current.correction = correction; ++ if (m_CurrentAudio.correction != 0.0 && m_CurrentVideo.correction != 0.0 && fabs(m_CurrentAudio.correction - m_CurrentVideo.correction) < DVD_MSEC_TO_TIME(1000)) ++ { ++ m_offset_pts += correction; ++ UpdateCorrection(pPacket, correction); ++ m_CurrentAudio.correction = 0.0; ++ m_CurrentVideo.correction = 0.0; ++ } ++ else ++ { ++ // not sure yet - flags the packets as unknown until we get confirmation on another audio/video packet ++ pPacket->dts = DVD_NOPTS_VALUE; ++ pPacket->pts = DVD_NOPTS_VALUE; ++ } + } + } + +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h +index 68d68a1..fdc25af 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.h ++++ b/xbmc/cores/dvdplayer/DVDPlayer.h +@@ -77,6 +77,7 @@ class CCurrentStream + const int player; + // stuff to handle starting after seek + double startpts; ++ double correction; + + CCurrentStream(StreamType t, int i) + : type(t) +@@ -98,6 +99,7 @@ class CCurrentStream + inited = false; + started = false; + startpts = DVD_NOPTS_VALUE; ++ correction = 0.0; + } + + double dts_end() -- -2.0.3 +2.0.4 + + +From 80152007eb8c364d610c32ee51217f69fc97017c Mon Sep 17 00:00:00 2001 +From: Rainer Hochecker +Date: Wed, 20 Aug 2014 20:33:57 +0200 +Subject: [PATCH 27/27] VAAPI: fixes + +--- + xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp +index 9aec0c9..913063c 100644 +--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp ++++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp +@@ -1303,6 +1303,7 @@ void COutput::StateMachine(int signal, Protocol *port, Message *msg) + ReleaseBufferPool(true); + msg->Reply(COutputControlProtocol::ACC); + m_state = O_TOP_UNCONFIGURED; ++ m_extTimeout = 10000; + return; + default: + break; +@@ -2872,7 +2873,9 @@ bool CFFmpegPostproc::Init(EINTERLACEMETHOD method) + else if (method == VS_INTERLACEMETHOD_RENDER_BOB || + method == VS_INTERLACEMETHOD_NONE) + { +- CLog::Log(LOGDEBUG, "CFFmpegPostproc::Init - no skip deinterlacing"); ++ CLog::Log(LOGDEBUG, "CFFmpegPostproc::Init - skip deinterlacing"); ++ avfilter_inout_free(&outputs); ++ avfilter_inout_free(&inputs); + } + else + { +-- +2.0.4