From 59ba745d77f61768b70edde2af02f8717c46d4f3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 16 Feb 2013 00:07:30 +0100 Subject: [PATCH 01/14] xbmc: add PR2245 Signed-off-by: Stephan Raue --- .../xbmc/patches/xbmc-990.15-PR2245.patch | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 packages/mediacenter/xbmc/patches/xbmc-990.15-PR2245.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-990.15-PR2245.patch b/packages/mediacenter/xbmc/patches/xbmc-990.15-PR2245.patch new file mode 100644 index 0000000000..40b17c8756 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/xbmc-990.15-PR2245.patch @@ -0,0 +1,53 @@ +From 8b6032793bcc05a6ec06773c95463a22d2c9881b Mon Sep 17 00:00:00 2001 +From: popcornmix +Date: Fri, 15 Feb 2013 17:58:41 +0000 +Subject: [PATCH] [rbp] Fix for hang after seeking introduced by ASS fix + +#2206 introduced a regression when seeking in some types of SD files where the video stutters and/or stalls. +This is caused by using the wrong clock in FlipPage +--- + xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp +index ec7e7f6..5a6e31e 100644 +--- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp ++++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp +@@ -461,15 +461,15 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket) + m_iSleepEndTime = iCurrentClock + iSleepTime; + } + +- if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < m_iSleepEndTime) ++ if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < m_iSleepEndTime + DVD_MSEC_TO_TIME(500)) + return; + +- m_iSleepEndTime = DVD_NOPTS_VALUE; +- + double pts_media = m_av_clock->OMXMediaTime(false, false); + ProcessOverlays(iGroupId, pts_media); + +- g_renderManager.FlipPage(CThread::m_bStop, pts_media / DVD_TIME_BASE, -1, FS_NONE); ++ g_renderManager.FlipPage(CThread::m_bStop, m_iSleepEndTime / DVD_TIME_BASE, -1, FS_NONE); ++ ++ m_iSleepEndTime = DVD_NOPTS_VALUE; + + //m_av_clock->WaitAbsoluteClock((iCurrentClock + iSleepTime)); + } +@@ -580,12 +580,14 @@ void OMXPlayerVideo::Process() + m_av_clock->OMXReset(false); + m_av_clock->UnLock(); + m_started = false; ++ m_iSleepEndTime = DVD_NOPTS_VALUE; + } + else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (COMXPlayerVideo::Flush()) + { + CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_FLUSH"); + m_stalled = true; + m_started = false; ++ m_iSleepEndTime = DVD_NOPTS_VALUE; + m_av_clock->Lock(); + m_av_clock->OMXStop(false); + m_omxVideo.Reset(); +-- +1.7.10 + From 582c4ee4bf163188157f2a7401f6015c210d154b Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 16:49:28 +0200 Subject: [PATCH 02/14] Revert "oscam: daemonize on start. thanks dag-" This reverts commit adf452c2342c5be5fccb1740cfc985a8eb020dff. --- packages/addons/service/softcam/oscam/source/bin/oscam.start | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/service/softcam/oscam/source/bin/oscam.start b/packages/addons/service/softcam/oscam/source/bin/oscam.start index c694418545..c46241aad8 100755 --- a/packages/addons/service/softcam/oscam/source/bin/oscam.start +++ b/packages/addons/service/softcam/oscam/source/bin/oscam.start @@ -91,7 +91,7 @@ if [ ! "$(pidof oscam)" ]; then # use ". " because of variable export . $driver_dvb done - LD_LIBRARY_PATH="$ADDON_DIR/lib:$LD_LIBRARY_PATH" exec oscam $OSCAM_ARG > /dev/null 2>&1 + LD_LIBRARY_PATH="$ADDON_DIR/lib:$LD_LIBRARY_PATH" oscam $OSCAM_ARG > /dev/null 2>&1 sleep 1 done & fi From 97c46a02b5e816c9de4f0d311bd00313524cc454 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 16:51:11 +0200 Subject: [PATCH 03/14] tvheadend: revert part of 6f41b37 --- .../service/multimedia/tvheadend/source/bin/tvheadend.start | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start b/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start index 3fa1dbfec5..d39b22dc8f 100755 --- a/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start +++ b/packages/addons/service/multimedia/tvheadend/source/bin/tvheadend.start @@ -134,9 +134,9 @@ mkdir -p $ADDON_HOME fi if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then logger -t Tvheadend "### Preloading capmt_ca.so library ###" - LD_PRELOAD=$ADDON_DIR/bin/capmt_ca.so exec $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE + LD_PRELOAD=$ADDON_DIR/bin/capmt_ca.so $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE else - exec $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE + $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE fi done & fi From e18851b6fe8791d3b6e5c48cde5e67e1214192e0 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 16:55:11 +0200 Subject: [PATCH 04/14] oscam: update to oscam-8357 --- packages/addons/service/softcam/oscam/changelog.txt | 3 +++ packages/addons/service/softcam/oscam/meta | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/addons/service/softcam/oscam/changelog.txt b/packages/addons/service/softcam/oscam/changelog.txt index 0501e20999..a9366c8500 100644 --- a/packages/addons/service/softcam/oscam/changelog.txt +++ b/packages/addons/service/softcam/oscam/changelog.txt @@ -1,3 +1,6 @@ +3.0.7 +- update to oscam-8357 + 3.0.6 - update to oscam-8334 diff --git a/packages/addons/service/softcam/oscam/meta b/packages/addons/service/softcam/oscam/meta index 02c9873cfb..9e33856c44 100644 --- a/packages/addons/service/softcam/oscam/meta +++ b/packages/addons/service/softcam/oscam/meta @@ -20,8 +20,8 @@ ################################################################################ PKG_NAME="oscam" -PKG_VERSION="8334" -PKG_REV="6" +PKG_VERSION="8357" +PKG_REV="7" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.streamboard.tv/oscam/wiki" From 73beb73afcb3f1426abad3372176553308a74be1 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 17:12:23 +0200 Subject: [PATCH 05/14] transmission: add transmission-remote closes #1915 --- packages/addons/service/downloadmanager/transmission/addon | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/addons/service/downloadmanager/transmission/addon b/packages/addons/service/downloadmanager/transmission/addon index c388128e33..e63645d74e 100755 --- a/packages/addons/service/downloadmanager/transmission/addon +++ b/packages/addons/service/downloadmanager/transmission/addon @@ -24,6 +24,7 @@ mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin cp $PKG_BUILD/daemon/transmission-daemon $ADDON_BUILD/$PKG_ADDON_ID/bin + cp $PKG_BUILD/daemon/transmission-remote $ADDON_BUILD/$PKG_ADDON_ID/bin mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/web cp -R $PKG_BUILD/web/* $ADDON_BUILD/$PKG_ADDON_ID/web From cef57bf5978114ec5182cf6b6b7899a9c7ca8345 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 19:00:35 +0200 Subject: [PATCH 06/14] linux: update alsa/hda patches. thanks to Anssi --- ...ken-workaround-for-HDMI-SPDIF-confli.patch | 139 ++++++++++++++++++ ...ound_for_conflicting_IEC958_controls.patch | 94 ------------ ...utputting-HDMI-audio-before-prepare-.patch | 76 ++++++++++ ...-broken-audio-over-optical-on-alc662.patch | 93 ------------ 4 files changed, 215 insertions(+), 187 deletions(-) create mode 100644 packages/linux/patches/3.7.8/linux-990.04-hda-Fix-broken-workaround-for-HDMI-SPDIF-confli.patch delete mode 100644 packages/linux/patches/3.7.8/linux-990.04-hda-Fix_the_workaround_for_conflicting_IEC958_controls.patch create mode 100644 packages/linux/patches/3.7.8/linux-990.06-hda-Avoid-outputting-HDMI-audio-before-prepare-.patch delete mode 100644 packages/linux/patches/3.7.8/linux-990.06-hda-fix-broken-audio-over-optical-on-alc662.patch diff --git a/packages/linux/patches/3.7.8/linux-990.04-hda-Fix-broken-workaround-for-HDMI-SPDIF-confli.patch b/packages/linux/patches/3.7.8/linux-990.04-hda-Fix-broken-workaround-for-HDMI-SPDIF-confli.patch new file mode 100644 index 0000000000..4261a2d877 --- /dev/null +++ b/packages/linux/patches/3.7.8/linux-990.04-hda-Fix-broken-workaround-for-HDMI-SPDIF-confli.patch @@ -0,0 +1,139 @@ +From ea9b43addc4d90ca5b029f47f85ca152320a1e8d Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 12 Feb 2013 17:02:41 +0100 +Subject: [PATCH] ALSA: hda - Fix broken workaround for HDMI/SPDIF conflicts + +The commit [dcda58061: ALSA: hda - Add workaround for conflicting +IEC958 controls] introduced a workaround for cards that have both +SPDIF and HDMI devices for giving device=1 to SPDIF control elements. +It turned out, however, that this workaround doesn't work well - + +- The workaround checks only conflicts in a single codec, but SPDIF + and HDMI are provided by multiple codecs in many cases, and + +- ALSA mixer abstraction doesn't care about the device number in ctl + elements, thus you'll get errors from amixer such as + % amixer scontrols -c 0 + ALSA lib simple_none.c:1551:(simple_add1) helem (MIXER,'IEC958 + Playback Switch',0,1,0) appears twice or more + amixer: Mixer hw:0 load error: Invalid argument + +This patch fixes the previous broken workaround. Instead of changing +the device number of SPDIF ctl elements, shift the element indices of +such controls up to 16. Also, the conflict check is performed over +all codecs found on the bus. + +HDMI devices will be put to dev=0,index=0 as before. Only the +conflicting SPDIF device is moved to a different place. The new place +of SPDIF device is supposed by the updated alsa-lib HDA-Intel.conf, +respectively. + +Reported-by: Stephan Raue +Reported-by: Anssi Hannula +Cc: [v3.8] +Signed-off-by: Takashi Iwai +--- + sound/pci/hda/hda_codec.c | 43 +++++++++++++++++++++---------------------- + sound/pci/hda/hda_codec.h | 3 ++- + 2 files changed, 23 insertions(+), 23 deletions(-) + +diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c +index e80f835..04b5738 100644 +--- a/sound/pci/hda/hda_codec.c ++++ b/sound/pci/hda/hda_codec.c +@@ -2332,11 +2332,12 @@ struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec, + EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl); + + static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name, +- int dev) ++ int start_idx) + { +- int idx; +- for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */ +- if (!find_mixer_ctl(codec, name, dev, idx)) ++ int i, idx; ++ /* 16 ctlrs should be large enough */ ++ for (i = 0, idx = start_idx; i < 16; i++, idx++) { ++ if (!find_mixer_ctl(codec, name, 0, idx)) + return idx; + } + return -EBUSY; +@@ -3305,30 +3306,29 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec, + int err; + struct snd_kcontrol *kctl; + struct snd_kcontrol_new *dig_mix; +- int idx, dev = 0; +- const int spdif_pcm_dev = 1; ++ int idx = 0; ++ const int spdif_index = 16; + struct hda_spdif_out *spdif; ++ struct hda_bus *bus = codec->bus; + +- if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI && ++ if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI && + type == HDA_PCM_TYPE_SPDIF) { +- dev = spdif_pcm_dev; +- } else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF && ++ idx = spdif_index; ++ } else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF && + type == HDA_PCM_TYPE_HDMI) { +- for (idx = 0; idx < codec->spdif_out.used; idx++) { +- spdif = snd_array_elem(&codec->spdif_out, idx); +- for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { +- kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx); +- if (!kctl) +- break; +- kctl->id.device = spdif_pcm_dev; +- } ++ /* suppose a single SPDIF device */ ++ for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { ++ kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0); ++ if (!kctl) ++ break; ++ kctl->id.index = spdif_index; + } +- codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI; ++ bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI; + } +- if (!codec->primary_dig_out_type) +- codec->primary_dig_out_type = type; ++ if (!bus->primary_dig_out_type) ++ bus->primary_dig_out_type = type; + +- idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev); ++ idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx); + if (idx < 0) { + printk(KERN_ERR "hda_codec: too many IEC958 outputs\n"); + return -EBUSY; +@@ -3338,7 +3338,6 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec, + kctl = snd_ctl_new1(dig_mix, codec); + if (!kctl) + return -ENOMEM; +- kctl->id.device = dev; + kctl->id.index = idx; + kctl->private_value = codec->spdif_out.used - 1; + err = snd_hda_ctl_add(codec, associated_nid, kctl); +diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h +index e8c9442..23ca172 100644 +--- a/sound/pci/hda/hda_codec.h ++++ b/sound/pci/hda/hda_codec.h +@@ -679,6 +679,8 @@ struct hda_bus { + unsigned int response_reset:1; /* controller was reset */ + unsigned int in_reset:1; /* during reset operation */ + unsigned int power_keep_link_on:1; /* don't power off HDA link */ ++ ++ int primary_dig_out_type; /* primary digital out PCM type */ + }; + + /* +@@ -846,7 +848,6 @@ struct hda_codec { + struct mutex hash_mutex; + struct snd_array spdif_out; + unsigned int spdif_in_enable; /* SPDIF input enable? */ +- int primary_dig_out_type; /* primary digital out PCM type */ + const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */ + struct snd_array init_pins; /* initial (BIOS) pin configurations */ + struct snd_array driver_pins; /* pin configs set by codec parser */ +-- +1.7.10 + diff --git a/packages/linux/patches/3.7.8/linux-990.04-hda-Fix_the_workaround_for_conflicting_IEC958_controls.patch b/packages/linux/patches/3.7.8/linux-990.04-hda-Fix_the_workaround_for_conflicting_IEC958_controls.patch deleted file mode 100644 index b042469a87..0000000000 --- a/packages/linux/patches/3.7.8/linux-990.04-hda-Fix_the_workaround_for_conflicting_IEC958_controls.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 1aec20670bfd1c0680d2ea4b29c4e5d8f1bdb43f Mon Sep 17 00:00:00 2001 -From: Anssi Hannula -Date: Sat, 9 Feb 2013 00:19:09 +0200 -Subject: [PATCH] ALSA: hda - Fix the workaround for conflicting IEC958 - controls - -Commit dcda5806165c155d90b9aa466a1602cf4726012b ("ALSA: hda - Add -workaround for conflicting IEC958 controls") added a workaround for -cards that have both an S/PDIF and an HDMI device, so that S/PDIF IEC958 -controls will be moved to device=1 on such cards. - -However, the workaround did not take it into account that the S/PDIF and -HDMI devices may be on different codecs of the same card. Currently this -is always the case, and the workaround therefore fails to work. - -Fix the workaround to handle card-wide IEC958 conflicts. - -Reported-by: Stephan Raue -Signed-off-by: Anssi Hannula ---- - sound/pci/hda/hda_codec.c | 27 +++++++++++++++------------ - sound/pci/hda/hda_codec.h | 4 +++- - 2 files changed, 18 insertions(+), 13 deletions(-) - -diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c -index 822df97..fe5d6fc 100644 ---- a/sound/pci/hda/hda_codec.c -+++ b/sound/pci/hda/hda_codec.c -@@ -3135,25 +3135,28 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec, - int idx, dev = 0; - const int spdif_pcm_dev = 1; - struct hda_spdif_out *spdif; -+ struct hda_codec *c; - -- if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI && -+ if (codec->bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI && - type == HDA_PCM_TYPE_SPDIF) { - dev = spdif_pcm_dev; -- } else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF && -+ } else if (codec->bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF && - type == HDA_PCM_TYPE_HDMI) { -- for (idx = 0; idx < codec->spdif_out.used; idx++) { -- spdif = snd_array_elem(&codec->spdif_out, idx); -- for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { -- kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx); -- if (!kctl) -- break; -- kctl->id.device = spdif_pcm_dev; -+ list_for_each_entry(c, &codec->bus->codec_list, list) { -+ for (idx = 0; idx < c->spdif_out.used; idx++) { -+ spdif = snd_array_elem(&c->spdif_out, idx); -+ for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { -+ kctl = find_mixer_ctl(c, dig_mix->name, 0, idx); -+ if (!kctl) -+ break; -+ kctl->id.device = spdif_pcm_dev; -+ } - } - } -- codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI; -+ codec->bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI; - } -- if (!codec->primary_dig_out_type) -- codec->primary_dig_out_type = type; -+ if (!codec->bus->primary_dig_out_type) -+ codec->bus->primary_dig_out_type = type; - - idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev); - if (idx < 0) { -diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h -index 8665540..ab807f7 100644 ---- a/sound/pci/hda/hda_codec.h -+++ b/sound/pci/hda/hda_codec.h -@@ -671,6 +671,9 @@ struct hda_bus { - unsigned int response_reset:1; /* controller was reset */ - unsigned int in_reset:1; /* during reset operation */ - unsigned int power_keep_link_on:1; /* don't power off HDA link */ -+ -+ /* primary digital out PCM type */ -+ int primary_dig_out_type; - }; - - /* -@@ -837,7 +840,6 @@ struct hda_codec { - struct mutex hash_mutex; - struct snd_array spdif_out; - unsigned int spdif_in_enable; /* SPDIF input enable? */ -- int primary_dig_out_type; /* primary digital out PCM type */ - const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */ - struct snd_array init_pins; /* initial (BIOS) pin configurations */ - struct snd_array driver_pins; /* pin configs set by codec parser */ --- -1.7.10 - diff --git a/packages/linux/patches/3.7.8/linux-990.06-hda-Avoid-outputting-HDMI-audio-before-prepare-.patch b/packages/linux/patches/3.7.8/linux-990.06-hda-Avoid-outputting-HDMI-audio-before-prepare-.patch new file mode 100644 index 0000000000..ac59d4a7a1 --- /dev/null +++ b/packages/linux/patches/3.7.8/linux-990.06-hda-Avoid-outputting-HDMI-audio-before-prepare-.patch @@ -0,0 +1,76 @@ +From a6024295fd3290a8c9c5519a03316081ee82378a Mon Sep 17 00:00:00 2001 +From: Anssi Hannula +Date: Sat, 16 Feb 2013 17:42:46 +0200 +Subject: [PATCH] ALSA: hda - Avoid outputting HDMI audio before prepare() and + after close() + +Some HDMI codecs (at least NVIDIA 0x10de000b:0x10de0101:0x100100) start +transmitting an empty audio stream as soon as PIN_OUT and AC_DIG1_ENABLE +are enabled. + +Since commit 6169b673618bf0b2518ce413b54925782a603f06 ("ALSA: hda - +Always turn on pins for HDMI/DP") this happens at first open() time, and +will continue even after close(). + +Additionally, some codecs (at least Intel PantherPoint HDMI) currently +continue transmitting HDMI audio even after close() in case some actual +audio was output after open() (this happens regardless of PIN_OUT). + +Empty HDMI audio transmission when not intended has the effect that a +possible HDMI audio sink/receiver may prefer the empty HDMI audio stream +over an actual audio stream on its S/PDIF inputs. + +To avoid the issue before first prepare(), set stream format to 0 on +codec initialization. 0 is not a valid format value for HDMI and will +prevent the audio stream from being output. + +Additionally, at close() time, make sure that the stream is cleaned up. +This will ensure that the format is reset to 0 at that time, preventing +audio from being output in that case. + +Thanks to OpenELEC developers and users for their help in investigating +this issue on the affected NVIDIA "ION2" hardware. Testing of the final +version on NVIDIA ION2 was done by OpenELEC user "MrXIII". Testing on +Intel PantherPoint was done by myself. + +Signed-off-by: Anssi Hannula +Cc: stable@vger.kernel.org +--- + sound/pci/hda/patch_hdmi.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c +index 807a2aa..bcb83c7 100644 +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -1253,6 +1253,14 @@ static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t cvt_nid) + if (err < 0) + return err; + ++ /* ++ * Some HDMI codecs (at least NVIDIA 0x10de000b:0x10de0101:0x100100) ++ * start transmitting an empty audio stream as soon as PIN_OUT and ++ * AC_DIG1_ENABLE are enabled, which happens at open() time. ++ * To avoid that, set format to 0, which is not valid for HDMI. ++ */ ++ snd_hda_codec_write(codec, cvt_nid, 0, AC_VERB_SET_STREAM_FORMAT, 0); ++ + spec->num_cvts++; + + return 0; +@@ -1372,6 +1380,12 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo, + struct hdmi_spec_per_pin *per_pin; + + if (hinfo->nid) { ++ /* ++ * Make sure no empty audio is output after this point by ++ * setting stream format to 0, which is not valid for HDMI. ++ */ ++ __snd_hda_codec_cleanup_stream(codec, hinfo->nid, 1); ++ + cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid); + if (snd_BUG_ON(cvt_idx < 0)) + return -EINVAL; +-- +1.7.10 + diff --git a/packages/linux/patches/3.7.8/linux-990.06-hda-fix-broken-audio-over-optical-on-alc662.patch b/packages/linux/patches/3.7.8/linux-990.06-hda-fix-broken-audio-over-optical-on-alc662.patch deleted file mode 100644 index 0c7f1922f0..0000000000 --- a/packages/linux/patches/3.7.8/linux-990.06-hda-fix-broken-audio-over-optical-on-alc662.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 09c206b7ee18b50d81916697150bd510f198716d Mon Sep 17 00:00:00 2001 -From: Stefan Saraev -Date: Fri, 15 Feb 2013 20:19:48 +0200 -Subject: [PATCH] hda: fix broken audio over optical on alc662+ - - original commit: - - > commit 2626d16bbdedcd64c6af3c519aecd5a6f2356e58 - > Author: Takashi Iwai - > Date: Fri Dec 14 10:22:35 2012 +0100 - > - > ALSA: hda - Always turn on pins for HDMI/DP - > - > commit 6169b673618bf0b2518ce413b54925782a603f06 upstream. - > - > We've seen the broken HDMI *video* output on some machines with GM965, - > and the debugging session pointed that the culprit is the disabled - > audio output pins. Toggling these pins dynamically on demand caused - > flickering of HDMI TV. - > - > This patch changes the behavior to keep the pin ON constantly. - > - > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=51421 - > - > Signed-off-by: Takashi Iwai - > Signed-off-by: Greg Kroah-Hartman - - for now we revert the above commit, until we have a propper fix ---- - sound/pci/hda/patch_hdmi.c | 18 ++++++++++++++---- - 1 files changed, 14 insertions(+), 4 deletions(-) - -diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c -index 791ef80..2587119 100644 ---- a/sound/pci/hda/patch_hdmi.c -+++ b/sound/pci/hda/patch_hdmi.c -@@ -431,11 +431,9 @@ static void hdmi_init_pin(struct hda_codec *codec, hda_nid_t pin_nid) - if (get_wcaps(codec, pin_nid) & AC_WCAP_OUT_AMP) - snd_hda_codec_write(codec, pin_nid, 0, - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); -- /* Enable pin out: some machines with GM965 gets broken output when -- * the pin is disabled or changed while using with HDMI -- */ -+ /* Disable pin out until stream is active*/ - snd_hda_codec_write(codec, pin_nid, 0, -- AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); -+ AC_VERB_SET_PIN_WIDGET_CONTROL, 0); - } - - static int hdmi_get_channel_count(struct hda_codec *codec, hda_nid_t cvt_nid) -@@ -1343,6 +1341,7 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo, - struct hdmi_spec *spec = codec->spec; - int pin_idx = hinfo_to_pin_index(spec, hinfo); - hda_nid_t pin_nid = spec->pins[pin_idx].pin_nid; -+ int pinctl; - bool non_pcm; - - non_pcm = check_non_pcm_per_cvt(codec, cvt_nid); -@@ -1351,6 +1350,11 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo, - - hdmi_setup_audio_infoframe(codec, pin_idx, non_pcm, substream); - -+ pinctl = snd_hda_codec_read(codec, pin_nid, 0, -+ AC_VERB_GET_PIN_WIDGET_CONTROL, 0); -+ snd_hda_codec_write(codec, pin_nid, 0, -+ AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl | PIN_OUT); -+ - return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format); - } - -@@ -1370,6 +1374,7 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo, - int cvt_idx, pin_idx; - struct hdmi_spec_per_cvt *per_cvt; - struct hdmi_spec_per_pin *per_pin; -+ int pinctl; - - if (hinfo->nid) { - cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid); -@@ -1386,6 +1391,11 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo, - return -EINVAL; - per_pin = &spec->pins[pin_idx]; - -+ pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0, -+ AC_VERB_GET_PIN_WIDGET_CONTROL, 0); -+ snd_hda_codec_write(codec, per_pin->pin_nid, 0, -+ AC_VERB_SET_PIN_WIDGET_CONTROL, -+ pinctl & ~PIN_OUT); - snd_hda_spdif_ctls_unassign(codec, pin_idx); - per_pin->chmap_set = false; - memset(per_pin->chmap, 0, sizeof(per_pin->chmap)); --- -1.7.2.5 - From 81472a7a29e2380e674820c22f88e3fe7b4494ed Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 19:13:52 +0200 Subject: [PATCH 07/14] alsa-lib: update upstream patches --- ...r-conflicting-IEC958-controls-for-H.patch} | 49 ++++++++++--------- ...round-for-handling-IEC958-workaround.patch | 37 -------------- 2 files changed, 25 insertions(+), 61 deletions(-) rename packages/audio/alsa-lib/patches/{alsa-lib-990.02-Add_workaround_for_conflicting_IEC958controls_for_HD-audio.patch => alsa-lib-990.02-Add-workaround-for-conflicting-IEC958-controls-for-H.patch} (72%) delete mode 100644 packages/audio/alsa-lib/patches/alsa-lib-990.04-hcontrol-Add-workaround-for-handling-IEC958-workaround.patch diff --git a/packages/audio/alsa-lib/patches/alsa-lib-990.02-Add_workaround_for_conflicting_IEC958controls_for_HD-audio.patch b/packages/audio/alsa-lib/patches/alsa-lib-990.02-Add-workaround-for-conflicting-IEC958-controls-for-H.patch similarity index 72% rename from packages/audio/alsa-lib/patches/alsa-lib-990.02-Add_workaround_for_conflicting_IEC958controls_for_HD-audio.patch rename to packages/audio/alsa-lib/patches/alsa-lib-990.02-Add-workaround-for-conflicting-IEC958-controls-for-H.patch index cbe465673f..3868b0b7da 100644 --- a/packages/audio/alsa-lib/patches/alsa-lib-990.02-Add_workaround_for_conflicting_IEC958controls_for_HD-audio.patch +++ b/packages/audio/alsa-lib/patches/alsa-lib-990.02-Add-workaround-for-conflicting-IEC958-controls-for-H.patch @@ -1,12 +1,13 @@ -From: Takashi Iwai suse.de> -Subject: [PATCH RFC 2/2] Add workaround for conflicting IEC958 controls for HD-audio -Newsgroups: gmane.linux.alsa.devel -Date: 2012-10-12 15:25:49 GMT (17 weeks, 8 hours and 27 minutes ago) +From 91e42790dd0a9489a94e3784d220d76ad2d98b36 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Sat, 16 Feb 2013 18:29:59 +0200 +Subject: [PATCH] Add workaround for conflicting IEC958 controls for HD-audio + When both an SPDIF and an HDMI output are present on HD-audio, both try to access IEC958 controls with index=0 although one of them must -be wrong. For avoiding this conflict, the recent kernel code moves -the IEC958 controls of an SPDIF with device=1 once when the conflict -happens. +be wrong. For avoiding this conflict, the recent kernel code (3.9 and +3.8 stable) moves the IEC958 controls of an SPDIF with index=16 once +when the conflict happens. In this patch, the corresponding support is added in alsa-lib side. The new "skip_rest" boolean flag is added to the hooked element @@ -15,21 +16,21 @@ ignored once when this element is present and evaluated. With this new flag, the HD-audio config takes device=1 primarily, then take device=0 as fallback. -Signed-off-by: Takashi Iwai suse.de> +Signed-off-by: Takashi Iwai --- - src/conf/cards/HDA-Intel.conf | 16 ++++++++++++++++ - src/control/setup.c | 19 ++++++++++++++++--- + src/conf/cards/HDA-Intel.conf | 16 ++++++++++++++++ + src/control/setup.c | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/conf/cards/HDA-Intel.conf b/src/conf/cards/HDA-Intel.conf -index d4f2667..55fb624 100644 +index d4f2667..3957c12 100644 --- a/src/conf/cards/HDA-Intel.conf +++ b/src/conf/cards/HDA-Intel.conf @@ -113,6 +113,22 @@ HDA-Intel.pcm.iec958.0 { hook_args [ { name "IEC958 Playback Default" -+ device 1 ++ index 16 + optional true + lock true + preserve true @@ -37,7 +38,7 @@ index d4f2667..55fb624 100644 + } + { + name "IEC958 Playback Switch" -+ device 1 ++ index 16 + optional true + value true + # if this element is present, skip the rest @@ -49,19 +50,19 @@ index d4f2667..55fb624 100644 preserve true value [ $AES0 $AES1 $AES2 $AES3 ] diff --git a/src/control/setup.c b/src/control/setup.c -index bd3599d..f23bf2c 100644 +index eecda45..72facb0 100644 --- a/src/control/setup.c +++ b/src/control/setup.c @@ -396,7 +396,7 @@ static int snd_config_get_ctl_elem_value(snd_config_t *conf, return 0; } - + -static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_data) +static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_data, int *quit) { snd_config_t *conf; snd_config_iterator_t i, next; -@@ -408,6 +408,7 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da +@@ -409,6 +409,7 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da int lock = 0; int preserve = 0; int optional = 0; @@ -69,8 +70,8 @@ index bd3599d..f23bf2c 100644 snd_config_t *value = NULL, *mask = NULL; snd_sctl_elem_t *elem = NULL; int err; -@@ -491,6 +492,13 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da - optional = err; +@@ -516,6 +517,13 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da + free(tmp); continue; } + if (strcmp(id, "skip_rest") == 0) { @@ -83,9 +84,9 @@ index bd3599d..f23bf2c 100644 SNDERR("Unknown field %s", id); return -EINVAL; } -@@ -539,6 +547,9 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da +@@ -564,6 +572,9 @@ static int add_elem(snd_sctl_t *h, snd_config_t *_conf, snd_config_t *private_da if (! optional) - SNDERR("Cannot obtain info for CTL elem (%s,'%s',%li,%li,%li): %s",snd_ctl_elem_iface_name(iface), name, index, device, subdevice, snd_strerror(err)); + SNDERR("Cannot obtain info for CTL elem (%s,'%s',%li,%li,%li): %s", snd_ctl_elem_iface_name(iface), name, index, device, subdevice, snd_strerror(err)); goto _err; + } else { + if (skip_rest) @@ -93,16 +94,16 @@ index bd3599d..f23bf2c 100644 } snd_ctl_elem_value_set_id(elem->val, elem->id); snd_ctl_elem_value_set_id(elem->old, elem->id); -@@ -594,7 +605,7 @@ int snd_sctl_build(snd_sctl_t **sctl, snd_ctl_t *handle, snd_config_t *conf, snd +@@ -619,7 +630,7 @@ int snd_sctl_build(snd_sctl_t **sctl, snd_ctl_t *handle, snd_config_t *conf, snd { snd_sctl_t *h; snd_config_iterator_t i, next; - int err; + int err, quit = 0; - + assert(sctl); assert(handle); -@@ -614,11 +625,13 @@ int snd_sctl_build(snd_sctl_t **sctl, snd_ctl_t *handle, snd_config_t *conf, snd +@@ -639,11 +650,13 @@ int snd_sctl_build(snd_sctl_t **sctl, snd_ctl_t *handle, snd_config_t *conf, snd INIT_LIST_HEAD(&h->elems); snd_config_for_each(i, next, conf) { snd_config_t *n = snd_config_iterator_entry(i); @@ -118,5 +119,5 @@ index bd3599d..f23bf2c 100644 *sctl = h; return 0; -- -1.7.12.2 +1.7.10 diff --git a/packages/audio/alsa-lib/patches/alsa-lib-990.04-hcontrol-Add-workaround-for-handling-IEC958-workaround.patch b/packages/audio/alsa-lib/patches/alsa-lib-990.04-hcontrol-Add-workaround-for-handling-IEC958-workaround.patch deleted file mode 100644 index 4e14e471ea..0000000000 --- a/packages/audio/alsa-lib/patches/alsa-lib-990.04-hcontrol-Add-workaround-for-handling-IEC958-workaround.patch +++ /dev/null @@ -1,37 +0,0 @@ -From b7f85e4b35aeead9b3c64f06c0c4a4617baaf7f5 Mon Sep 17 00:00:00 2001 -From: Anssi Hannula -Date: Sat, 9 Feb 2013 01:37:48 +0200 -Subject: [PATCH] hcontrol: Add workaround for handling IEC958 workaround - -IEC958 workaround in the kernel can cause controls that have same the -same name and index but a different device. - -Temporarily ignore failure of adding such conflicting controls if the -mixer class fails on them. ---- - src/control/hcontrol.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/control/hcontrol.c b/src/control/hcontrol.c -index ee1d907..dfc0a5a 100644 ---- a/src/control/hcontrol.c -+++ b/src/control/hcontrol.c -@@ -612,8 +612,13 @@ int snd_hctl_load(snd_hctl_t *hctl) - for (idx = 0; idx < hctl->count; idx++) { - int res = snd_hctl_throw_event(hctl, SNDRV_CTL_EVENT_MASK_ADD, - hctl->pelems[idx]); -- if (res < 0) -- return res; -+ if (res < 0) { -+ if (res == -EINVAL && snd_hctl_elem_get_device(hctl->pelems[idx]) == 1) { -+ SNDERR("ignoring mixer element addition failure on device 1 - IEC958 conflict workaround"); -+ } else { -+ return res; -+ } -+ } - } - err = snd_ctl_subscribe_events(hctl->ctl, 1); - _end: --- -1.7.10 - From a20709c1a6e641db59f8be468bab9baa6fc0f1c6 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 16 Feb 2013 18:24:46 +0100 Subject: [PATCH 08/14] xbmc: rename patches Signed-off-by: Stephan Raue --- ...pport-1ea917e.patch => xbmc-995.01-xvba_support-1ea917e.patch} | 0 ... => xbmc-995.11-multi-screen_fix_compilation_on_windows.patch} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/mediacenter/xbmc/patches.x86/{xbmc-801-xvba_support-1ea917e.patch => xbmc-995.01-xvba_support-1ea917e.patch} (100%) rename packages/mediacenter/xbmc/patches/todo/{xbmc-811.11-multi-screen_fix_compilation_on_windows.patch => xbmc-995.11-multi-screen_fix_compilation_on_windows.patch} (100%) diff --git a/packages/mediacenter/xbmc/patches.x86/xbmc-801-xvba_support-1ea917e.patch b/packages/mediacenter/xbmc/patches.x86/xbmc-995.01-xvba_support-1ea917e.patch similarity index 100% rename from packages/mediacenter/xbmc/patches.x86/xbmc-801-xvba_support-1ea917e.patch rename to packages/mediacenter/xbmc/patches.x86/xbmc-995.01-xvba_support-1ea917e.patch diff --git a/packages/mediacenter/xbmc/patches/todo/xbmc-811.11-multi-screen_fix_compilation_on_windows.patch b/packages/mediacenter/xbmc/patches/todo/xbmc-995.11-multi-screen_fix_compilation_on_windows.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/todo/xbmc-811.11-multi-screen_fix_compilation_on_windows.patch rename to packages/mediacenter/xbmc/patches/todo/xbmc-995.11-multi-screen_fix_compilation_on_windows.patch From 68fd7478cc7d0936359fbd35af552b5ba6483511 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 16 Feb 2013 18:25:07 +0100 Subject: [PATCH 09/14] xbmc: update RPi patches Signed-off-by: Stephan Raue --- .../xbmc-811.10-xvba_rpi_fixes-0aff5cd.patch | 192 ------ .../xbmc-995.10-xvba_rpi_fixes-81496e1.patch | 549 ++++++++++++++++++ 2 files changed, 549 insertions(+), 192 deletions(-) delete mode 100644 packages/mediacenter/xbmc/patches/todo/xbmc-811.10-xvba_rpi_fixes-0aff5cd.patch create mode 100644 packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch diff --git a/packages/mediacenter/xbmc/patches/todo/xbmc-811.10-xvba_rpi_fixes-0aff5cd.patch b/packages/mediacenter/xbmc/patches/todo/xbmc-811.10-xvba_rpi_fixes-0aff5cd.patch deleted file mode 100644 index 3cacbeaaa4..0000000000 --- a/packages/mediacenter/xbmc/patches/todo/xbmc-811.10-xvba_rpi_fixes-0aff5cd.patch +++ /dev/null @@ -1,192 +0,0 @@ -From d33a276284356e974dcf14e6c86b74064fb0715f Mon Sep 17 00:00:00 2001 -From: xbmc -Date: Sun, 10 Feb 2013 18:38:56 +0100 -Subject: [PATCH 1/2] renderer: add buffering - get clock via IPlayer - ---- - xbmc/cores/IPlayer.h | 2 ++ - xbmc/cores/VideoRenderers/RenderManager.cpp | 9 ++++++--- - xbmc/cores/VideoRenderers/RenderManager.h | 3 +-- - xbmc/cores/dvdplayer/DVDPlayer.cpp | 7 ++++++- - xbmc/cores/dvdplayer/DVDPlayer.h | 2 ++ - 5 files changed, 17 insertions(+), 6 deletions(-) - -diff --git a/xbmc/cores/IPlayer.h b/xbmc/cores/IPlayer.h -index 5ed88d1..f136998 100644 ---- a/xbmc/cores/IPlayer.h -+++ b/xbmc/cores/IPlayer.h -@@ -229,6 +229,8 @@ class IPlayer - */ - virtual void GetSubtitleCapabilities(std::vector &subCaps) { subCaps.assign(1,IPC_SUBS_ALL); }; - -+ virtual double GetClock(double& absolute, bool interpolated = true) {return 0; }; -+ - protected: - IPlayerCallback& m_callback; - }; -diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp -index 9290f80..4664426 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.cpp -+++ b/xbmc/cores/VideoRenderers/RenderManager.cpp -@@ -325,7 +325,7 @@ void CXBMCRenderManager::RenderUpdate(bool clear, DWORD flags, DWORD alpha) - m_presentevent.Set(); - } - --unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock) -+unsigned int CXBMCRenderManager::PreInit() - { - CRetakeLock lock(m_sharedSection); - -@@ -333,7 +333,6 @@ unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock) - m_presenterr = 0.0; - m_errorindex = 0; - memset(m_errorbuff, 0, sizeof(m_errorbuff)); -- m_pClock = pClock; - - m_bIsStarted = false; - m_bPauseDrawing = false; -@@ -1045,7 +1044,11 @@ void CXBMCRenderManager::PrepareNextRender() - } - - double iClockSleep, iPlayingClock, iCurrentClock; -- iPlayingClock = m_pClock->GetClock(iCurrentClock, false); -+ if (g_application.m_pPlayer) -+ iPlayingClock = g_application.m_pPlayer->GetClock(iCurrentClock, false); -+ else -+ iPlayingClock = iCurrentClock = 0; -+ - iClockSleep = m_renderBuffers[idx].pts - iPlayingClock; - - if (m_speed) -diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h -index 6746957..b931f7d 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.h -+++ b/xbmc/cores/VideoRenderers/RenderManager.h -@@ -72,7 +72,7 @@ class CXBMCRenderManager - int AddVideoPicture(DVDVideoPicture& picture); - - void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE, int speed = 0); -- unsigned int PreInit(CDVDClock *pClock); -+ unsigned int PreInit(); - void UnInit(); - bool Flush(); - -@@ -225,7 +225,6 @@ class CXBMCRenderManager - int m_presentsource; - CEvent m_presentevent; - CEvent m_flushEvent; -- CDVDClock *m_pClock; - - - OVERLAY::CRenderer m_overlays; -diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp -index 9e6e470..d0c7cd2 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayer.cpp -+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp -@@ -463,7 +463,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options) - m_ready.Reset(); - - #if defined(HAS_VIDEO_PLAYBACK) -- g_renderManager.PreInit(&m_clock); -+ g_renderManager.PreInit(); - #endif - - Create(); -@@ -4129,3 +4129,8 @@ bool CDVDPlayer::CachePVRStream(void) const - !g_PVRManager.IsPlayingRecording() && - g_advancedSettings.m_bPVRCacheInDvdPlayer; - } -+ -+double CDVDPlayer::GetClock(double& absolute, bool interpolated) -+{ -+ return m_clock.GetClock(absolute, interpolated); -+} -diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h -index 35bf762..ab73950 100644 ---- a/xbmc/cores/dvdplayer/DVDPlayer.h -+++ b/xbmc/cores/dvdplayer/DVDPlayer.h -@@ -254,6 +254,8 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer - virtual bool SwitchChannel(const PVR::CPVRChannel &channel); - virtual bool CachePVRStream(void) const; - -+ virtual double GetClock(double& absolute, bool interpolated = true); -+ - enum ECacheState - { CACHESTATE_DONE = 0 - , CACHESTATE_FULL // player is filling up the demux queue --- -1.7.10 - - -From 0aff5cdc544caa87fe5e314e5624c07a160ffe61 Mon Sep 17 00:00:00 2001 -From: xbmc -Date: Sun, 10 Feb 2013 18:40:30 +0100 -Subject: [PATCH 2/2] OMXPlayer: adopt to buffering in renderer - ---- - xbmc/cores/omxplayer/OMXPlayer.cpp | 5 +++++ - xbmc/cores/omxplayer/OMXPlayer.h | 2 ++ - xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 17 +++++++++++++---- - 3 files changed, 20 insertions(+), 4 deletions(-) - -diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp -index 60aa9ab..1acb9e2 100644 ---- a/xbmc/cores/omxplayer/OMXPlayer.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayer.cpp -@@ -4210,4 +4210,9 @@ void COMXPlayer::GetSubtitleCapabilities(std::vector &subCaps) - subCaps.push_back(IPC_SUBS_ALL); - } - -+double COMXPlayer::GetClock(double& absolute, bool interpolated) -+{ -+ return m_av_clock.GetClock(absolute, interpolated); -+} -+ - #endif -diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h -index ca824c2..57fc7a0 100644 ---- a/xbmc/cores/omxplayer/OMXPlayer.h -+++ b/xbmc/cores/omxplayer/OMXPlayer.h -@@ -332,6 +332,8 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer - virtual void GetScalingMethods(std::vector &scalingMethods); - virtual void GetAudioCapabilities(std::vector &audioCaps); - virtual void GetSubtitleCapabilities(std::vector &subCaps); -+ -+ virtual double GetClock(double& absolute, bool interpolated = true); - protected: - friend class COMXSelectionStreams; - -diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -index 5f3f050..e8ff1aa 100644 ---- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp -@@ -452,13 +452,22 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket) - m_dropbase = 0.0f; - #endif - -- double pts_media = m_av_clock->OMXMediaTime(false, false); -- ProcessOverlays(iGroupId, pts_media); -- - if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) ) - return; - -- g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, FS_NONE); -+ int buffer = g_renderManager.WaitForBuffer(m_bStop); -+ while (buffer < 0 && !CThread::m_bStop) -+ { -+ Sleep(1); -+ buffer = g_renderManager.WaitForBuffer(m_bStop); -+ } -+ if (buffer < 0) -+ return; -+ -+ double pts_media = m_av_clock->OMXMediaTime(false, false); -+ ProcessOverlays(iGroupId, pts_media); -+ -+ g_renderManager.FlipPage(CThread::m_bStop, pts, -1, FS_NONE, m_speed); - - //m_av_clock->WaitAbsoluteClock((iCurrentClock + iSleepTime)); - } --- -1.7.10 - diff --git a/packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch b/packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch new file mode 100644 index 0000000000..029e8fa7a0 --- /dev/null +++ b/packages/mediacenter/xbmc/patches/todo/xbmc-995.10-xvba_rpi_fixes-81496e1.patch @@ -0,0 +1,549 @@ +From d33a276284356e974dcf14e6c86b74064fb0715f Mon Sep 17 00:00:00 2001 +From: xbmc +Date: Sun, 10 Feb 2013 18:38:56 +0100 +Subject: [PATCH 1/4] renderer: add buffering - get clock via IPlayer + +--- + xbmc/cores/IPlayer.h | 2 ++ + xbmc/cores/VideoRenderers/RenderManager.cpp | 9 ++++++--- + xbmc/cores/VideoRenderers/RenderManager.h | 3 +-- + xbmc/cores/dvdplayer/DVDPlayer.cpp | 7 ++++++- + xbmc/cores/dvdplayer/DVDPlayer.h | 2 ++ + 5 files changed, 17 insertions(+), 6 deletions(-) + +diff --git a/xbmc/cores/IPlayer.h b/xbmc/cores/IPlayer.h +index 5ed88d1..f136998 100644 +--- a/xbmc/cores/IPlayer.h ++++ b/xbmc/cores/IPlayer.h +@@ -229,6 +229,8 @@ class IPlayer + */ + virtual void GetSubtitleCapabilities(std::vector &subCaps) { subCaps.assign(1,IPC_SUBS_ALL); }; + ++ virtual double GetClock(double& absolute, bool interpolated = true) {return 0; }; ++ + protected: + IPlayerCallback& m_callback; + }; +diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp +index 9290f80..4664426 100644 +--- a/xbmc/cores/VideoRenderers/RenderManager.cpp ++++ b/xbmc/cores/VideoRenderers/RenderManager.cpp +@@ -325,7 +325,7 @@ void CXBMCRenderManager::RenderUpdate(bool clear, DWORD flags, DWORD alpha) + m_presentevent.Set(); + } + +-unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock) ++unsigned int CXBMCRenderManager::PreInit() + { + CRetakeLock lock(m_sharedSection); + +@@ -333,7 +333,6 @@ unsigned int CXBMCRenderManager::PreInit(CDVDClock *pClock) + m_presenterr = 0.0; + m_errorindex = 0; + memset(m_errorbuff, 0, sizeof(m_errorbuff)); +- m_pClock = pClock; + + m_bIsStarted = false; + m_bPauseDrawing = false; +@@ -1045,7 +1044,11 @@ void CXBMCRenderManager::PrepareNextRender() + } + + double iClockSleep, iPlayingClock, iCurrentClock; +- iPlayingClock = m_pClock->GetClock(iCurrentClock, false); ++ if (g_application.m_pPlayer) ++ iPlayingClock = g_application.m_pPlayer->GetClock(iCurrentClock, false); ++ else ++ iPlayingClock = iCurrentClock = 0; ++ + iClockSleep = m_renderBuffers[idx].pts - iPlayingClock; + + if (m_speed) +diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h +index 6746957..b931f7d 100644 +--- a/xbmc/cores/VideoRenderers/RenderManager.h ++++ b/xbmc/cores/VideoRenderers/RenderManager.h +@@ -72,7 +72,7 @@ class CXBMCRenderManager + int AddVideoPicture(DVDVideoPicture& picture); + + void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE, int speed = 0); +- unsigned int PreInit(CDVDClock *pClock); ++ unsigned int PreInit(); + void UnInit(); + bool Flush(); + +@@ -225,7 +225,6 @@ class CXBMCRenderManager + int m_presentsource; + CEvent m_presentevent; + CEvent m_flushEvent; +- CDVDClock *m_pClock; + + + OVERLAY::CRenderer m_overlays; +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp +index 9e6e470..d0c7cd2 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp ++++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp +@@ -463,7 +463,7 @@ bool CDVDPlayer::OpenFile(const CFileItem& file, const CPlayerOptions &options) + m_ready.Reset(); + + #if defined(HAS_VIDEO_PLAYBACK) +- g_renderManager.PreInit(&m_clock); ++ g_renderManager.PreInit(); + #endif + + Create(); +@@ -4129,3 +4129,8 @@ bool CDVDPlayer::CachePVRStream(void) const + !g_PVRManager.IsPlayingRecording() && + g_advancedSettings.m_bPVRCacheInDvdPlayer; + } ++ ++double CDVDPlayer::GetClock(double& absolute, bool interpolated) ++{ ++ return m_clock.GetClock(absolute, interpolated); ++} +diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h +index 35bf762..ab73950 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayer.h ++++ b/xbmc/cores/dvdplayer/DVDPlayer.h +@@ -254,6 +254,8 @@ class CDVDPlayer : public IPlayer, public CThread, public IDVDPlayer + virtual bool SwitchChannel(const PVR::CPVRChannel &channel); + virtual bool CachePVRStream(void) const; + ++ virtual double GetClock(double& absolute, bool interpolated = true); ++ + enum ECacheState + { CACHESTATE_DONE = 0 + , CACHESTATE_FULL // player is filling up the demux queue +-- +1.7.10 + + +From 113de500903cbe1933e1a50fc7809b8f6b7f2636 Mon Sep 17 00:00:00 2001 +From: xbmc +Date: Fri, 15 Feb 2013 17:00:47 +0100 +Subject: [PATCH 2/4] buffering: some rework + +--- + xbmc/cores/VideoRenderers/OverlayRenderer.cpp | 17 +++++++---------- + xbmc/cores/VideoRenderers/OverlayRenderer.h | 5 ++--- + xbmc/cores/VideoRenderers/RenderManager.cpp | 10 +++------- + xbmc/cores/VideoRenderers/RenderManager.h | 4 ++-- + xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 18 +++++++++++++++++- + 5 files changed, 31 insertions(+), 23 deletions(-) + +diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp +index 94aaaf5..f7f74ce 100644 +--- a/xbmc/cores/VideoRenderers/OverlayRenderer.cpp ++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.cpp +@@ -93,24 +93,28 @@ long COverlayMainThread::Release() + + CRenderer::~CRenderer() + { +- for(int i = 0; i < 2; i++) ++ for(int i = 0; i < 10; i++) + Release(m_buffers[i]); + } + +-void CRenderer::AddOverlay(CDVDOverlay* o, double pts) ++void CRenderer::AddOverlay(CDVDOverlay* o, double pts, int index) + { + CSingleLock lock(m_section); + ++ m_decode = index; ++ + SElement e; + e.pts = pts; + e.overlay_dvd = o->Acquire(); + m_buffers[m_decode].push_back(e); + } + +-void CRenderer::AddOverlay(COverlay* o, double pts) ++void CRenderer::AddOverlay(COverlay* o, double pts, int index) + { + CSingleLock lock(m_section); + ++ m_decode = index; ++ + SElement e; + e.pts = pts; + e.overlay = o->Acquire(); +@@ -163,13 +167,6 @@ void CRenderer::Flip() + m_render = (m_render + 1) % m_iNumBuffers; + } + +-void CRenderer::SetBuffer(int idx) +-{ +- CSingleLock lock(m_section); +- Release(m_buffers[idx]); +- m_decode = idx; +-} +- + void CRenderer::ReleaseBuffer(int idx) + { + CSingleLock lock(m_section); +diff --git a/xbmc/cores/VideoRenderers/OverlayRenderer.h b/xbmc/cores/VideoRenderers/OverlayRenderer.h +index c6740a5..0921fc5 100644 +--- a/xbmc/cores/VideoRenderers/OverlayRenderer.h ++++ b/xbmc/cores/VideoRenderers/OverlayRenderer.h +@@ -92,14 +92,13 @@ + CRenderer(); + ~CRenderer(); + +- void AddOverlay(CDVDOverlay* o, double pts); +- void AddOverlay(COverlay* o, double pts); ++ void AddOverlay(CDVDOverlay* o, double pts, int index); ++ void AddOverlay(COverlay* o, double pts, int index); + void AddCleanup(COverlay* o); + void Flip(); + void Render(); + void Flush(); + void SetNumBuffers(int numBuffers) { m_iNumBuffers = numBuffers; } +- void SetBuffer(int idx); + void ReleaseBuffer(int idx); + + protected: +diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp +index 4664426..7094913 100644 +--- a/xbmc/cores/VideoRenderers/RenderManager.cpp ++++ b/xbmc/cores/VideoRenderers/RenderManager.cpp +@@ -228,7 +228,7 @@ CStdString CXBMCRenderManager::GetVSyncState() + return state; + } + +-bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation) ++bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation, bool buffering) + { + /* make sure any queued frame was fully presented */ + double timeout = m_presenttime + 0.1; +@@ -248,8 +248,8 @@ bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsi + return false; + } + +- // check if decoder supports buffering +- m_bCodecSupportsBuffering = false; ++ // set buffering ++ m_bCodecSupportsBuffering = buffering; + if (format == RENDER_FMT_VDPAU + || format == RENDER_FMT_VDPAU_420 + || format == RENDER_FMT_XVBA) +@@ -959,10 +959,6 @@ int CXBMCRenderManager::WaitForBuffer(volatile bool& bStop) + } + lock.Leave(); + +- { CRetakeLock lock(m_sharedSection); +- m_overlays.SetBuffer((m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers); +- } +- + if (bStop) + return -1; + +diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h +index b931f7d..27bb8a2 100644 +--- a/xbmc/cores/VideoRenderers/RenderManager.h ++++ b/xbmc/cores/VideoRenderers/RenderManager.h +@@ -66,7 +66,7 @@ class CXBMCRenderManager + void SetViewMode(int iViewMode); + + // Functions called from mplayer +- bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation); ++ bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format, unsigned int orientation, bool buffering); + bool IsConfigured(); + + int AddVideoPicture(DVDVideoPicture& picture); +@@ -79,7 +79,7 @@ class CXBMCRenderManager + void AddOverlay(CDVDOverlay* o, double pts) + { + CSharedLock lock(m_sharedSection); +- m_overlays.AddOverlay(o, pts); ++ m_overlays.AddOverlay(o, pts, (m_iOutputRenderBuffer + 1) % m_iNumRenderBuffers); + } + + void AddCleanup(OVERLAY::COverlay* o) +diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp +index 109d75b..8a6599c 100644 +--- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp ++++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp +@@ -1132,53 +1132,69 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) + } + + CStdString formatstr; ++ bool buffering; + + switch(pPicture->format) + { + case RENDER_FMT_YUV420P: + formatstr = "YV12"; ++ buffering = true; + break; + case RENDER_FMT_YUV420P16: + formatstr = "YV12P16"; ++ buffering = true; + break; + case RENDER_FMT_YUV420P10: + formatstr = "YV12P10"; ++ buffering = true; + break; + case RENDER_FMT_NV12: + formatstr = "NV12"; ++ buffering = true; + break; + case RENDER_FMT_UYVY422: + formatstr = "UYVY"; ++ buffering = true; + break; + case RENDER_FMT_YUYV422: + formatstr = "YUY2"; ++ buffering = true; + break; + case RENDER_FMT_VDPAU: + formatstr = "VDPAU"; ++ buffering = true; + break; + case RENDER_FMT_VDPAU_420: + formatstr = "VDPAU_420"; ++ buffering = true; + break; + case RENDER_FMT_DXVA: + formatstr = "DXVA"; ++ buffering = false; + break; + case RENDER_FMT_VAAPI: + formatstr = "VAAPI"; ++ buffering = false; + break; + case RENDER_FMT_OMXEGL: + formatstr = "OMXEGL"; ++ buffering = false; + break; + case RENDER_FMT_CVBREF: + formatstr = "BGRA"; ++ buffering = false; + break; + case RENDER_FMT_BYPASS: + formatstr = "BYPASS"; ++ buffering = false; + break; + case RENDER_FMT_NONE: + formatstr = "NONE"; ++ buffering = false; + break; + case RENDER_FMT_XVBA: + formatstr = "XVBA"; ++ buffering = true; + break; + } + +@@ -1189,7 +1205,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) + } + + CLog::Log(LOGDEBUG,"%s - change configuration. %dx%d. framerate: %4.2f. format: %s",__FUNCTION__,pPicture->iWidth, pPicture->iHeight, config_framerate, formatstr.c_str()); +- if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->format, pPicture->extended_format, m_hints.orientation)) ++ if(!g_renderManager.Configure(pPicture->iWidth, pPicture->iHeight, pPicture->iDisplayWidth, pPicture->iDisplayHeight, config_framerate, flags, pPicture->format, pPicture->extended_format, m_hints.orientation, buffering)) + { + CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__); + return EOS_ABORT; +-- +1.7.10 + + +From 4d71be9fa0e34dccbb977199f1bde2f200f8b56e Mon Sep 17 00:00:00 2001 +From: xbmc +Date: Sat, 16 Feb 2013 08:32:18 +0100 +Subject: [PATCH 3/4] add buffering for GLES + +--- + xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 10 ---------- + xbmc/cores/VideoRenderers/LinuxRendererGLES.h | 6 ++++-- + 2 files changed, 4 insertions(+), 12 deletions(-) + +diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp +index 2a59e2b..1bf2f3b 100644 +--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp ++++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp +@@ -135,13 +135,6 @@ + delete m_dllSwScale; + } + +-void CLinuxRendererGLES::ManageTextures() +-{ +- m_NumYV12Buffers = 2; +- //m_iYV12RenderBuffer = 0; +- return; +-} +- + bool CLinuxRendererGLES::ValidateRenderTarget() + { + if (!m_bValidated) +@@ -395,7 +388,6 @@ void CLinuxRendererGLES::Update(bool bPauseDrawing) + { + if (!m_bConfigured) return; + ManageDisplay(); +- ManageTextures(); + } + + void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha) +@@ -409,7 +401,6 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha) + if (m_renderMethod & RENDER_BYPASS) + { + ManageDisplay(); +- ManageTextures(); + // if running bypass, then the player might need the src/dst rects + // for sizing video playback on a layer other than the gles layer. + if (m_RenderUpdateCallBackFn) +@@ -449,7 +440,6 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha) + return; + + ManageDisplay(); +- ManageTextures(); + + g_graphicsContext.BeginPaint(); + +diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h +index c6b69db..7bdc3bc 100644 +--- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.h ++++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.h +@@ -41,7 +41,7 @@ + class COpenMaxVideo; + typedef std::vector Features; + +-#define NUM_BUFFERS 3 ++#define NUM_BUFFERS 10 + + + #undef ALIGN +@@ -138,6 +138,9 @@ class CLinuxRendererGLES : public CBaseRenderer + virtual void UnInit(); + virtual void Reset(); /* resets renderer after seek for example */ + virtual void ReorderDrawPoints(); ++ virtual void SetProcessorSize(int numBuffers) { m_NumYV12Buffers = numBuffers; } ++ virtual unsigned int GetMaxProcessorSize() { return NUM_BUFFERS; } ++ virtual unsigned int GetProcessorSize() { return m_NumYV12Buffers; } + + virtual void RenderUpdate(bool clear, DWORD flags = 0, DWORD alpha = 255); + +@@ -162,7 +165,6 @@ class CLinuxRendererGLES : public CBaseRenderer + protected: + virtual void Render(DWORD flags, int index); + +- virtual void ManageTextures(); + int NextYV12Texture(); + virtual bool ValidateRenderTarget(); + virtual void LoadShaders(int field=FIELD_FULL); +-- +1.7.10 + + +From 81496e1f405980d3be6b05c883bdbfb65d617e3e Mon Sep 17 00:00:00 2001 +From: xbmc +Date: Sun, 10 Feb 2013 18:40:30 +0100 +Subject: [PATCH 4/4] OMXPlayer: adopt to buffering in renderer + +--- + xbmc/cores/omxplayer/OMXPlayer.cpp | 5 +++++ + xbmc/cores/omxplayer/OMXPlayer.h | 2 ++ + xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 24 +++++++++++++++++++----- + 3 files changed, 26 insertions(+), 5 deletions(-) + +diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp +index 60aa9ab..1acb9e2 100644 +--- a/xbmc/cores/omxplayer/OMXPlayer.cpp ++++ b/xbmc/cores/omxplayer/OMXPlayer.cpp +@@ -4210,4 +4210,9 @@ void COMXPlayer::GetSubtitleCapabilities(std::vector &subCaps) + subCaps.push_back(IPC_SUBS_ALL); + } + ++double COMXPlayer::GetClock(double& absolute, bool interpolated) ++{ ++ return m_av_clock.GetClock(absolute, interpolated); ++} ++ + #endif +diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h +index ca824c2..57fc7a0 100644 +--- a/xbmc/cores/omxplayer/OMXPlayer.h ++++ b/xbmc/cores/omxplayer/OMXPlayer.h +@@ -332,6 +332,8 @@ class COMXPlayer : public IPlayer, public CThread, public IDVDPlayer + virtual void GetScalingMethods(std::vector &scalingMethods); + virtual void GetAudioCapabilities(std::vector &audioCaps); + virtual void GetSubtitleCapabilities(std::vector &subCaps); ++ ++ virtual double GetClock(double& absolute, bool interpolated = true); + protected: + friend class COMXSelectionStreams; + +diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp +index 5f3f050..88c75db 100644 +--- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp ++++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp +@@ -158,6 +158,8 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints) + m_open = true; + m_send_eos = false; + ++ g_renderManager.EnableBuffering(false); ++ + return true; + } + +@@ -358,7 +360,7 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket) + + if(!g_renderManager.Configure(m_hints.width, m_hints.height, + iDisplayWidth, iDisplayHeight, m_fps, flags, format, 0, +- m_hints.orientation)) ++ m_hints.orientation, true)) + { + CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__); + return; +@@ -452,13 +454,22 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket) + m_dropbase = 0.0f; + #endif + +- double pts_media = m_av_clock->OMXMediaTime(false, false); +- ProcessOverlays(iGroupId, pts_media); +- + if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) ) + return; + +- g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, FS_NONE); ++ int buffer = g_renderManager.WaitForBuffer(m_bStop); ++ while (buffer < 0 && !CThread::m_bStop) ++ { ++ Sleep(1); ++ buffer = g_renderManager.WaitForBuffer(m_bStop); ++ } ++ if (buffer < 0) ++ return; ++ ++ double pts_media = m_av_clock->OMXMediaTime(false, false); ++ ProcessOverlays(iGroupId, pts_media); ++ ++ g_renderManager.FlipPage(CThread::m_bStop, pts, -1, FS_NONE, m_speed); + + //m_av_clock->WaitAbsoluteClock((iCurrentClock + iSleepTime)); + } +@@ -569,6 +580,7 @@ void OMXPlayerVideo::Process() + m_av_clock->OMXReset(false); + m_av_clock->UnLock(); + m_started = false; ++ g_renderManager.EnableBuffering(false); + } + else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (COMXPlayerVideo::Flush()) + { +@@ -580,6 +592,7 @@ void OMXPlayerVideo::Process() + m_omxVideo.Reset(); + m_av_clock->OMXReset(false); + m_av_clock->UnLock(); ++ g_renderManager.EnableBuffering(false); + } + else if (pMsg->IsType(CDVDMsg::PLAYER_SETSPEED)) + { +@@ -664,6 +677,7 @@ void OMXPlayerVideo::Process() + m_codecname = m_omxVideo.GetDecoderName(); + m_started = true; + m_messageParent.Put(new CDVDMsgInt(CDVDMsg::PLAYER_STARTED, DVDPLAYER_VIDEO)); ++ g_renderManager.EnableBuffering(true); + } + + // guess next frame pts. iDuration is always valid +-- +1.7.10 + From 628279039b82101c5f060aa562a2b109a3b35f7f Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 19:48:18 +0200 Subject: [PATCH 10/14] CouchPotatoServer: update to CouchPotatoServer-a49a00a --- packages/3rdparty/download/CouchPotatoServer/meta | 2 +- ...e-cache.patch => CouchPotatoServer-a49a00a-move-cache.patch} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/3rdparty/download/CouchPotatoServer/patches/{CouchPotatoServer-811f35b-move-cache.patch => CouchPotatoServer-a49a00a-move-cache.patch} (100%) diff --git a/packages/3rdparty/download/CouchPotatoServer/meta b/packages/3rdparty/download/CouchPotatoServer/meta index dac6f7c74a..5469068066 100644 --- a/packages/3rdparty/download/CouchPotatoServer/meta +++ b/packages/3rdparty/download/CouchPotatoServer/meta @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="CouchPotatoServer" -PKG_VERSION="811f35b" +PKG_VERSION="a49a00a" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" diff --git a/packages/3rdparty/download/CouchPotatoServer/patches/CouchPotatoServer-811f35b-move-cache.patch b/packages/3rdparty/download/CouchPotatoServer/patches/CouchPotatoServer-a49a00a-move-cache.patch similarity index 100% rename from packages/3rdparty/download/CouchPotatoServer/patches/CouchPotatoServer-811f35b-move-cache.patch rename to packages/3rdparty/download/CouchPotatoServer/patches/CouchPotatoServer-a49a00a-move-cache.patch From 3a6b597f45a2359e698c3ade231bd59a304f23e3 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 19:51:14 +0200 Subject: [PATCH 11/14] SickBeard: update to SickBeard-4e57625 --- packages/3rdparty/download/SickBeard/meta | 2 +- ...5-001-remove_logo_update-header_and_donate_button-0.1.patch} | 0 ... => SickBeard-4e57625-002-remove_default_settings-0.3.patch} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename packages/3rdparty/download/SickBeard/patches/{SickBeard-6cb5e76-001-remove_logo_update-header_and_donate_button-0.1.patch => SickBeard-4e57625-001-remove_logo_update-header_and_donate_button-0.1.patch} (100%) rename packages/3rdparty/download/SickBeard/patches/{SickBeard-6cb5e76-002-remove_default_settings-0.3.patch => SickBeard-4e57625-002-remove_default_settings-0.3.patch} (100%) diff --git a/packages/3rdparty/download/SickBeard/meta b/packages/3rdparty/download/SickBeard/meta index a2e9c6546d..99113c8a94 100644 --- a/packages/3rdparty/download/SickBeard/meta +++ b/packages/3rdparty/download/SickBeard/meta @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="SickBeard" -PKG_VERSION="6cb5e76" +PKG_VERSION="4e57625" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" diff --git a/packages/3rdparty/download/SickBeard/patches/SickBeard-6cb5e76-001-remove_logo_update-header_and_donate_button-0.1.patch b/packages/3rdparty/download/SickBeard/patches/SickBeard-4e57625-001-remove_logo_update-header_and_donate_button-0.1.patch similarity index 100% rename from packages/3rdparty/download/SickBeard/patches/SickBeard-6cb5e76-001-remove_logo_update-header_and_donate_button-0.1.patch rename to packages/3rdparty/download/SickBeard/patches/SickBeard-4e57625-001-remove_logo_update-header_and_donate_button-0.1.patch diff --git a/packages/3rdparty/download/SickBeard/patches/SickBeard-6cb5e76-002-remove_default_settings-0.3.patch b/packages/3rdparty/download/SickBeard/patches/SickBeard-4e57625-002-remove_default_settings-0.3.patch similarity index 100% rename from packages/3rdparty/download/SickBeard/patches/SickBeard-6cb5e76-002-remove_default_settings-0.3.patch rename to packages/3rdparty/download/SickBeard/patches/SickBeard-4e57625-002-remove_default_settings-0.3.patch From 2117b99bf2fb5bed108b95a628b71a2e6f3954db Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Sat, 16 Feb 2013 19:53:13 +0200 Subject: [PATCH 12/14] SABnzbd-Suite: bump --- .../service/downloadmanager/SABnzbd-Suite/changelog.txt | 5 +++++ packages/addons/service/downloadmanager/SABnzbd-Suite/meta | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt b/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt index 04c45a4564..5008331f93 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt @@ -1,3 +1,8 @@ +3.0.4 +- update to SickBeard-4e57625 +- update to CouchPotatoServer-a49a00a +- fix keep awake option + 3.0.3 - update to SABnzbd-0.7.11 - update to CouchPotatoServer-811f35b diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/meta b/packages/addons/service/downloadmanager/SABnzbd-Suite/meta index c537ebaff3..27762494d4 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/meta +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/meta @@ -20,7 +20,7 @@ PKG_NAME="SABnzbd-Suite" PKG_VERSION="3.0" -PKG_REV="3" +PKG_REV="4" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.openelec.tv" From 6cfa01304fa3ea711596d549ac7afd8022a12861 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 16 Feb 2013 20:49:06 +0100 Subject: [PATCH 13/14] libnl: update to libnl-3.2.21 Signed-off-by: Stephan Raue --- packages/network/libnl/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/libnl/meta b/packages/network/libnl/meta index d06e95a1f0..53c80c91c4 100644 --- a/packages/network/libnl/meta +++ b/packages/network/libnl/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="libnl" -PKG_VERSION="3.2.16" +PKG_VERSION="3.2.21" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" From b3e87927b56b767155c3bc12c975796af191e312 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 16 Feb 2013 20:49:24 +0100 Subject: [PATCH 14/14] xf86-video-intel: update to xf86-video-intel-2.21.2 Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-intel/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-video-intel/meta b/packages/x11/driver/xf86-video-intel/meta index 278f907fe6..f684895fc6 100644 --- a/packages/x11/driver/xf86-video-intel/meta +++ b/packages/x11/driver/xf86-video-intel/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xf86-video-intel" -PKG_VERSION="2.21.0" +PKG_VERSION="2.21.2" PKG_REV="1" PKG_ARCH="i386 x86_64" PKG_LICENSE="OSS"