From 90779b9553b1fb8fbe2b82842eca36b3b8541e2c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 15 Apr 2012 17:05:45 +0200 Subject: [PATCH] xbmc-rpi: update to xbmc-rpi-d8a02e0, sync with last changes after merge Signed-off-by: Stephan Raue --- .../xbmc-rpi-theme-Confluence/meta | 2 +- packages/mediacenter/xbmc-rpi/build | 1 - .../config/repository.openelec.tv/addon.xml | 8 +- packages/mediacenter/xbmc-rpi/meta | 2 +- .../xbmc-rpi-28cdd20-801-cec-PR570.patch | 1137 ----------------- ...-add_support_to_specify_GIT_REV-0.1.patch} | 0 ...i-d8a02e0-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...-rpi-d8a02e0-311-fix_rsxs_build-0.1.patch} | 0 ...a02e0-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...-rpi-d8a02e0-404-add_lame_check-0.6.patch} | 0 ...ONOPTIMIZE_with_external_Python-0.1.patch} | 0 ...-d8a02e0-452-change_lcd_content-0.1.patch} | 0 ...e0-453-add_openelec.tv_RSS_news-0.1.patch} | 0 ...i-d8a02e0-454-disable_backslash-0.1.patch} | 0 ...8a02e0-457-fix_connection_check-0.1.patch} | 6 +- ...-add_remote_irtrans_mediacenter-0.1.patch} | 0 ...d8a02e0-463-add_remote_devinput-0.1.patch} | 0 ...4-add_eject_keymapping_for_lirc-0.1.patch} | 0 ...c-rpi-d8a02e0-981-toggleButtonState.patch} | 0 19 files changed, 9 insertions(+), 1147 deletions(-) delete mode 100644 packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-801-cec-PR570.patch rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-001-add_support_to_specify_GIT_REV-0.1.patch => xbmc-rpi-d8a02e0-001-add_support_to_specify_GIT_REV-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-303-fix_libdvd_xFLAGS-0.1.patch => xbmc-rpi-d8a02e0-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-311-fix_rsxs_build-0.1.patch => xbmc-rpi-d8a02e0-311-fix_rsxs_build-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-402-enable_yasm_in_ffmpeg-0.1.patch => xbmc-rpi-d8a02e0-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-404-add_lame_check-0.6.patch => xbmc-rpi-d8a02e0-404-add_lame_check-0.6.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch => xbmc-rpi-d8a02e0-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-452-change_lcd_content-0.1.patch => xbmc-rpi-d8a02e0-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-453-add_openelec.tv_RSS_news-0.1.patch => xbmc-rpi-d8a02e0-453-add_openelec.tv_RSS_news-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-454-disable_backslash-0.1.patch => xbmc-rpi-d8a02e0-454-disable_backslash-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-457-fix_connection_check-0.1.patch => xbmc-rpi-d8a02e0-457-fix_connection_check-0.1.patch} (59%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-462-add_remote_irtrans_mediacenter-0.1.patch => xbmc-rpi-d8a02e0-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-463-add_remote_devinput-0.1.patch => xbmc-rpi-d8a02e0-463-add_remote_devinput-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-464-add_eject_keymapping_for_lirc-0.1.patch => xbmc-rpi-d8a02e0-464-add_eject_keymapping_for_lirc-0.1.patch} (100%) rename packages/mediacenter/xbmc-rpi/patches/{xbmc-rpi-28cdd20-981-toggleButtonState.patch => xbmc-rpi-d8a02e0-981-toggleButtonState.patch} (100%) diff --git a/packages/mediacenter/xbmc-rpi-theme-Confluence/meta b/packages/mediacenter/xbmc-rpi-theme-Confluence/meta index 62777d2ee7..f27d0fb6c8 100644 --- a/packages/mediacenter/xbmc-rpi-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-rpi-theme-Confluence/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc-rpi-theme-Confluence" -PKG_VERSION="28cdd20" +PKG_VERSION="d8a02e0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc-rpi/build b/packages/mediacenter/xbmc-rpi/build index 12acdeb8d3..cee702ece8 100755 --- a/packages/mediacenter/xbmc-rpi/build +++ b/packages/mediacenter/xbmc-rpi/build @@ -184,7 +184,6 @@ fi # xbmc (ffmpeg) fails to build with LTO optimization strip_lto - strip_gold # dont use some optimizations because of problems # this fixes problems with faac implementation of ffmpeg diff --git a/packages/mediacenter/xbmc-rpi/config/repository.openelec.tv/addon.xml b/packages/mediacenter/xbmc-rpi/config/repository.openelec.tv/addon.xml index f4031209a4..d715467e85 100644 --- a/packages/mediacenter/xbmc-rpi/config/repository.openelec.tv/addon.xml +++ b/packages/mediacenter/xbmc-rpi/config/repository.openelec.tv/addon.xml @@ -1,8 +1,8 @@  + provider-name="Team [COLOR FF757677]Open[/COLOR][COLOR FF8ABEE2]ELEC[/COLOR]"> @ADDON_URL@/addons.xml @@ -10,8 +10,8 @@ @ADDON_URL@ - Install Add-ons, Plugins, Games and Programs from OpenELEC.tv - Download and install Add-ons, Plugins, Games and Programs from the Official OpenELEC.tv addon repository.[CR] By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR] All addons on this repository have under gone basic testing, if you find a broken or not working addon please report it to OpenELEC.tv so we can take any action needed. + Install Add-ons, Plugins, Games and Programs from [COLOR FF757677]Open[/COLOR][COLOR FF8ABEE2]ELEC[/COLOR] + Download and install Add-ons, Plugins, Games and Programs from the Official [COLOR FF757677]Open[/COLOR][COLOR FF8ABEE2]ELEC[/COLOR] addon repository.[CR] By using the official Repository you will be able to take advantage of our extensive file mirror service to help get you faster downloads from a region close to you.[CR] All addons on this repository have under gone basic testing, if you find a broken or not working addon please report it to [COLOR FF757677]Open[/COLOR][COLOR FF8ABEE2]ELEC[/COLOR] so we can take any action needed. all diff --git a/packages/mediacenter/xbmc-rpi/meta b/packages/mediacenter/xbmc-rpi/meta index bb31d17aee..f182ef2b38 100644 --- a/packages/mediacenter/xbmc-rpi/meta +++ b/packages/mediacenter/xbmc-rpi/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc-rpi" -PKG_VERSION="28cdd20" +PKG_VERSION="d8a02e0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-801-cec-PR570.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-801-cec-PR570.patch deleted file mode 100644 index a274bdddc0..0000000000 --- a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-801-cec-PR570.patch +++ /dev/null @@ -1,1137 +0,0 @@ -From 220e74259c67e106acc106fbb9546d750605814f Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Thu, 12 Jan 2012 22:16:49 +0100 -Subject: [PATCH 1/7] cec: added volume control on a CEC enabled amplifier - when one is found - ---- - xbmc/Application.cpp | 64 +++++++++ - xbmc/Application.h | 1 + - xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 145 ++++++++++++++++++++- - xbmc/peripherals/devices/PeripheralCecAdapter.h | 17 +++ - 4 files changed, 225 insertions(+), 2 deletions(-) - -diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp -index 5ed5de2..6f3fff7 100644 ---- a/xbmc/Application.cpp -+++ b/xbmc/Application.cpp -@@ -2574,6 +2574,26 @@ bool CApplication::OnAction(const CAction &action) - // Check for global volume control - if (action.GetAmount() && (action.GetID() == ACTION_VOLUME_UP || action.GetID() == ACTION_VOLUME_DOWN)) - { -+ /* try to set the volume on a connected amp */ -+ #ifdef HAVE_LIBCEC -+ vector peripherals; -+ if (g_peripherals.GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) -+ { -+ for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) -+ { -+ CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); -+ if (cecDevice && cecDevice->HasConnectedAudioSystem()) -+ { -+ if (action.GetID() == ACTION_VOLUME_UP) -+ cecDevice->ScheduleVolumeUp(); -+ else -+ cecDevice->ScheduleVolumeDown(); -+ return true; -+ } -+ } -+ } -+ #endif -+ - if (!m_pPlayer || !m_pPlayer->IsPassthrough()) - { - // increase or decrease the volume -@@ -5000,11 +5020,49 @@ void CApplication::ShowVolumeBar(const CAction *action) - - bool CApplication::IsMuted() const - { -+ /* try to set the mute setting on a connected amp */ -+#ifdef HAVE_LIBCEC -+ vector peripherals; -+ if (g_peripherals.GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) -+ { -+ for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) -+ { -+ CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); -+ if (cecDevice && cecDevice->HasConnectedAudioSystem()) -+ return false; -+ } -+ } -+#endif - return g_settings.m_bMute; - } - -+bool CApplication::CecMute(void) -+{ -+ /* try to set the mute setting on a connected amp */ -+#ifdef HAVE_LIBCEC -+ vector peripherals; -+ if (g_peripherals.GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) -+ { -+ for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) -+ { -+ CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); -+ if (cecDevice && cecDevice->HasConnectedAudioSystem()) -+ { -+ cecDevice->ScheduleMute(); -+ return true; -+ } -+ } -+ } -+#endif -+ -+ return false; -+} -+ - void CApplication::ToggleMute(void) - { -+ if (CecMute()) -+ return; -+ - if (g_settings.m_bMute) - UnMute(); - else -@@ -5013,6 +5071,9 @@ void CApplication::ToggleMute(void) - - void CApplication::Mute() - { -+ if (CecMute()) -+ return; -+ - g_settings.m_iPreMuteVolumeLevel = GetVolume(); - SetVolume(0); - g_settings.m_bMute = true; -@@ -5020,6 +5081,9 @@ void CApplication::Mute() - - void CApplication::UnMute() - { -+ if (CecMute()) -+ return; -+ - SetVolume(g_settings.m_iPreMuteVolumeLevel); - g_settings.m_iPreMuteVolumeLevel = 0; - g_settings.m_bMute = false; -diff --git a/xbmc/Application.h b/xbmc/Application.h -index 6e6a005..2fd09aa 100644 ---- a/xbmc/Application.h -+++ b/xbmc/Application.h -@@ -167,6 +167,7 @@ class CApplication : public CXBApplicationEx, public IPlayerCallback, public IMs - void SetVolume(long iValue, bool isPercentage = true); - bool IsMuted() const; - void ToggleMute(void); -+ bool CecMute(void); - void ShowVolumeBar(const CAction *action = NULL); - int GetPlaySpeed() const; - int GetSubtitleDelay() const; -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -index c1c3658..84d5464 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -@@ -31,6 +31,7 @@ - #include "peripherals/Peripherals.h" - #include "peripherals/bus/PeripheralBus.h" - #include "settings/GUISettings.h" -+#include "settings/Settings.h" - #include "utils/log.h" - - #include -@@ -43,6 +44,8 @@ - - /* time in seconds to ignore standby commands from devices after the screensaver has been activated */ - #define SCREENSAVER_TIMEOUT 10 -+#define VOLUME_CHANGE_TIMEOUT 250 -+#define VOLUME_REFRESH_TIMEOUT 100 - - class DllLibCECInterface - { -@@ -72,7 +75,8 @@ class DllLibCEC : public DllDynamic, DllLibCECInterface - m_bHasButton(false), - m_bIsReady(false), - m_strMenuLanguage("???"), -- m_lastKeypress(0) -+ m_lastKeypress(0), -+ m_lastChange(VOLUME_CHANGE_NONE) - { - m_button.iButton = 0; - m_button.iDuration = 0; -@@ -269,8 +273,24 @@ void CPeripheralCecAdapter::Process(void) - SetMenuLanguage(language.language); - } - -+ CStdString strNotification; -+ cec_osd_name tvName = m_cecAdapter->GetDeviceOSDName(CECDEVICE_TV); -+ strNotification.Format("%s: %s", g_localizeStrings.Get(36016), tvName.name); -+ -+ /* disable the mute setting when an amp is found, because the amp handles the mute setting and -+ set PCM output to 100% */ -+ if (HasConnectedAudioSystem()) -+ { -+ cec_osd_name ampName = m_cecAdapter->GetDeviceOSDName(CECDEVICE_AUDIOSYSTEM); -+ CLog::Log(LOGDEBUG, "%s - CEC capable amplifier found (%s). volume will be controlled on the amp", __FUNCTION__, ampName.name); -+ strNotification.AppendFormat(" - %s", ampName.name); -+ -+ g_settings.m_bMute = false; -+ g_settings.m_nVolumeLevel = VOLUME_MAXIMUM; -+ } -+ - m_cecAdapter->SetOSDString(CECDEVICE_TV, CEC_DISPLAY_CONTROL_DISPLAY_FOR_DEFAULT_TIME, g_localizeStrings.Get(36016).c_str()); -- CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), g_localizeStrings.Get(36016)); -+ CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), strNotification); - - while (!m_bStop) - { -@@ -278,6 +298,8 @@ void CPeripheralCecAdapter::Process(void) - if (!m_bStop) - ProcessNextCommand(); - if (!m_bStop) -+ ProcessVolumeChange(); -+ if (!m_bStop) - Sleep(5); - } - -@@ -339,6 +361,125 @@ bool CPeripheralCecAdapter::SetHdmiPort(int iHdmiPort) - return bReturn; - } - -+bool CPeripheralCecAdapter::HasConnectedAudioSystem(void) -+{ -+ return m_cecAdapter && m_cecAdapter->IsActiveDeviceType(CEC_DEVICE_TYPE_AUDIO_SYSTEM); -+} -+ -+void CPeripheralCecAdapter::ScheduleVolumeUp(void) -+{ -+ { -+ CSingleLock lock(m_critSection); -+ m_volumeChangeQueue.push(VOLUME_CHANGE_UP); -+ } -+ Sleep(5); -+} -+ -+void CPeripheralCecAdapter::ScheduleVolumeDown(void) -+{ -+ { -+ CSingleLock lock(m_critSection); -+ m_volumeChangeQueue.push(VOLUME_CHANGE_DOWN); -+ } -+ Sleep(5); -+} -+ -+void CPeripheralCecAdapter::ScheduleMute(void) -+{ -+ { -+ CSingleLock lock(m_critSection); -+ m_volumeChangeQueue.push(VOLUME_CHANGE_MUTE); -+ } -+ Sleep(5); -+} -+ -+void CPeripheralCecAdapter::ProcessVolumeChange(void) -+{ -+ bool bSendRelease(false); -+ CecVolumeChange pendingVolumeChange = VOLUME_CHANGE_NONE; -+ { -+ CSingleLock lock(m_critSection); -+ if (m_volumeChangeQueue.size() > 0) -+ { -+ /* get the first change from the queue */ -+ pendingVolumeChange = m_volumeChangeQueue.front(); -+ m_volumeChangeQueue.pop(); -+ -+ /* remove all dupe entries */ -+ while (m_volumeChangeQueue.size() > 0 && m_volumeChangeQueue.front() == pendingVolumeChange) -+ m_volumeChangeQueue.pop(); -+ -+ /* send another keypress after VOLUME_REFRESH_TIMEOUT ms */ -+ bool bRefresh(m_lastKeypress + VOLUME_REFRESH_TIMEOUT < XbmcThreads::SystemClockMillis()); -+ -+ /* only send the keypress when it hasn't been sent yet */ -+ if (pendingVolumeChange != m_lastChange) -+ { -+ m_lastKeypress = XbmcThreads::SystemClockMillis(); -+ m_lastChange = pendingVolumeChange; -+ } -+ else if (bRefresh) -+ { -+ m_lastKeypress = XbmcThreads::SystemClockMillis(); -+ pendingVolumeChange = m_lastChange; -+ } -+ else -+ pendingVolumeChange = VOLUME_CHANGE_NONE; -+ } -+ else if (m_lastKeypress > 0 && m_lastKeypress + VOLUME_CHANGE_TIMEOUT < XbmcThreads::SystemClockMillis()) -+ { -+ /* send a key release */ -+ m_lastKeypress = 0; -+ bSendRelease = true; -+ m_lastChange = VOLUME_CHANGE_NONE; -+ } -+ } -+ -+ switch (pendingVolumeChange) -+ { -+ case VOLUME_CHANGE_UP: -+ m_cecAdapter->SendKeypress(CECDEVICE_AUDIOSYSTEM, CEC_USER_CONTROL_CODE_VOLUME_UP, false); -+ break; -+ case VOLUME_CHANGE_DOWN: -+ m_cecAdapter->SendKeypress(CECDEVICE_AUDIOSYSTEM, CEC_USER_CONTROL_CODE_VOLUME_DOWN, false); -+ break; -+ case VOLUME_CHANGE_MUTE: -+ m_cecAdapter->SendKeypress(CECDEVICE_AUDIOSYSTEM, CEC_USER_CONTROL_CODE_MUTE, false); -+ break; -+ case VOLUME_CHANGE_NONE: -+ if (bSendRelease) -+ m_cecAdapter->SendKeyRelease(CECDEVICE_AUDIOSYSTEM, false); -+ break; -+ } -+} -+ -+void CPeripheralCecAdapter::VolumeUp(void) -+{ -+ if (HasConnectedAudioSystem()) -+ { -+ CSingleLock lock(m_critSection); -+ m_volumeChangeQueue.push(VOLUME_CHANGE_UP); -+ } -+} -+ -+void CPeripheralCecAdapter::VolumeDown(void) -+{ -+ if (HasConnectedAudioSystem()) -+ { -+ CSingleLock lock(m_critSection); -+ m_volumeChangeQueue.push(VOLUME_CHANGE_DOWN); -+ } -+} -+ -+void CPeripheralCecAdapter::Mute(void) -+{ -+ if (HasConnectedAudioSystem()) -+ { -+ CSingleLock lock(m_critSection); -+ m_volumeChangeQueue.push(VOLUME_CHANGE_MUTE); -+ } -+} -+ - void CPeripheralCecAdapter::SetMenuLanguage(const char *strLanguage) - { - if (m_strMenuLanguage.Equals(strLanguage)) -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.h b/xbmc/peripherals/devices/PeripheralCecAdapter.h -index 2fcbb1d..e1e302d 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.h -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.h -@@ -49,6 +49,13 @@ - unsigned int iDuration; - } CecButtonPress; - -+ typedef enum -+ { -+ VOLUME_CHANGE_NONE, -+ VOLUME_CHANGE_UP, -+ VOLUME_CHANGE_DOWN, -+ VOLUME_CHANGE_MUTE -+ } CecVolumeChange; - - class CPeripheralCecAdapter : public CPeripheralHID, public ANNOUNCEMENT::IAnnouncer, private CThread - { -@@ -59,6 +66,13 @@ - virtual void Announce(ANNOUNCEMENT::EAnnouncementFlag flag, const char *sender, const char *message, const CVariant &data); - virtual bool PowerOnCecDevices(CEC::cec_logical_address iLogicalAddress); - virtual bool StandbyCecDevices(CEC::cec_logical_address iLogicalAddress); -+ virtual bool HasConnectedAudioSystem(void); -+ virtual void ScheduleVolumeUp(void); -+ virtual void VolumeUp(void); -+ virtual void ScheduleVolumeDown(void); -+ virtual void VolumeDown(void); -+ virtual void ScheduleMute(void); -+ virtual void Mute(void); - - virtual bool SendPing(void); - virtual bool SetHdmiPort(int iHdmiPort); -@@ -77,6 +91,7 @@ - virtual bool InitialiseFeature(const PeripheralFeature feature); - virtual void Process(void); - virtual void ProcessNextCommand(void); -+ virtual void ProcessVolumeChange(void); - virtual void SetMenuLanguage(const char *strLanguage); - static bool FindConfigLocation(CStdString &strString); - static bool TranslateComPort(CStdString &strPort); -@@ -90,7 +105,9 @@ - CDateTime m_screensaverLastActivated; - CecButtonPress m_button; - std::queue m_buttonQueue; -+ std::queue m_volumeChangeQueue; - unsigned int m_lastKeypress; -+ CecVolumeChange m_lastChange; - CCriticalSection m_critSection; - }; - } --- -1.7.5.4 - - -From 19fcb081a184533fec42ef914a2a409ad2a99591 Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Thu, 12 Jan 2012 22:18:31 +0100 -Subject: [PATCH 2/7] cec: set the HDMI port and the device to which the CEC - adapter was connected, to be able to determine the - correct physical address. this is a work around, until - the CEC adapter's firmware supports physical address - detection, but is needed for people who have connected - XBMC to something else than the TV - ---- - language/Dutch/strings.xml | 1 + - language/English/strings.xml | 1 + - system/peripherals.xml | 1 + - xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 13 +++++++------ - xbmc/peripherals/devices/PeripheralCecAdapter.h | 2 +- - 5 files changed, 11 insertions(+), 7 deletions(-) - -diff --git a/language/Dutch/strings.xml b/language/Dutch/strings.xml -index 7d7fa9b..d49143d 100644 -\ No newline at end of file -diff --git a/language/English/strings.xml b/language/English/strings.xml -index ece866a..dd7fec7 100644 ---- a/language/English/strings.xml -+++ b/language/English/strings.xml -@@ -2389,4 +2389,5 @@ - Connected - Adapter found, but libcec is not available - Use the TV's language setting -+ Connected to HDMI device - -diff --git a/system/peripherals.xml b/system/peripherals.xml -index f5cf50d..94b9d85 100644 ---- a/system/peripherals.xml -+++ b/system/peripherals.xml -@@ -18,5 +18,6 @@ - - - -+ - - -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -index 84d5464..1992b6a 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -@@ -235,8 +235,9 @@ void CPeripheralCecAdapter::Process(void) - return; - - // set correct physical address from peripheral settings -+ int iDevice = GetSettingInt("connected_device"); - int iHdmiPort = GetSettingInt("cec_hdmi_port"); -- SetHdmiPort(iHdmiPort); -+ m_cecAdapter->SetHDMIPort((cec_logical_address)iDevice, iHdmiPort); - FlushLog(); - - // open the CEC adapter -@@ -347,15 +348,15 @@ bool CPeripheralCecAdapter::SendPing(void) - return bReturn; - } - --bool CPeripheralCecAdapter::SetHdmiPort(int iHdmiPort) -+bool CPeripheralCecAdapter::SetHdmiPort(int iDevice, int iHdmiPort) - { - bool bReturn(false); - if (m_cecAdapter && m_bIsReady) - { - if (iHdmiPort <= 0 || iHdmiPort > 16) - iHdmiPort = 1; -- CLog::Log(LOGDEBUG, "%s - changing active HDMI port to %d", __FUNCTION__, iHdmiPort); -- bReturn = m_cecAdapter->SetPhysicalAddress(iHdmiPort << 12); -+ CLog::Log(LOGDEBUG, "%s - changing active HDMI port to %d on device %d", __FUNCTION__, iHdmiPort, iDevice); -+ bReturn = m_cecAdapter->SetHDMIPort((cec_logical_address)iDevice, iHdmiPort); - } - - return bReturn; -@@ -863,9 +864,9 @@ void CPeripheralCecAdapter::OnSettingChanged(const CStdString &strChangedSetting - else if (bEnabled && !m_cecAdapter && m_bStarted) - InitialiseFeature(FEATURE_CEC); - } -- else if (strChangedSetting.Equals("cec_hdmi_port")) -+ else if (strChangedSetting.Equals("connected_device") || strChangedSetting.Equals("cec_hdmi_port")) - { -- SetHdmiPort(GetSettingInt("cec_hdmi_port")); -+ SetHdmiPort(GetSettingInt("connected_device"), GetSettingInt("cec_hdmi_port")); - } - } - -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.h b/xbmc/peripherals/devices/PeripheralCecAdapter.h -index e1e302d..768e38a 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.h -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.h -@@ -75,7 +75,7 @@ - virtual void Mute(void); - - virtual bool SendPing(void); -- virtual bool SetHdmiPort(int iHdmiPort); -+ virtual bool SetHdmiPort(int iDevice, int iHdmiPort); - - virtual void OnSettingChanged(const CStdString &strChangedSetting); - --- -1.7.5.4 - - -From 4369707420b58f8151a4769181aa3a4d4b798c1e Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Tue, 3 Jan 2012 20:40:19 +0100 -Subject: [PATCH 3/7] cec: also mark XBMC as active source when powering up - devices - ---- - xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -index 1992b6a..380c40e 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -@@ -264,6 +264,7 @@ void CPeripheralCecAdapter::Process(void) - if (GetSettingBool("cec_power_on_startup")) - { - PowerOnCecDevices(CECDEVICE_TV); -+ m_cecAdapter->SetActiveSource(); - FlushLog(); - } - --- -1.7.5.4 - - -From ecfbe68309888cb5befa4a8359a23bffdb0e0fe0 Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Tue, 10 Jan 2012 11:56:34 +0100 -Subject: [PATCH 4/7] cec: delete m_dll when it's been created. fixes leak - when the libCEC version is invalid - ---- - xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 5 ++++- - 1 files changed, 4 insertions(+), 1 deletions(-) - -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -index 380c40e..9cb195d 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -@@ -119,11 +119,14 @@ class DllLibCEC : public DllDynamic, DllLibCECInterface - m_bStop = true; - StopThread(true); - -- if (m_dll && m_cecAdapter) -+ if (m_cecAdapter) - { - FlushLog(); - m_dll->CECDestroy(m_cecAdapter); - m_cecAdapter = NULL; -+ } -+ if (m_dll) -+ { - delete m_dll; - m_dll = NULL; - } --- -1.7.5.4 - - -From 9434d5b9a5d8d5290f0af6bc0b85b17219c2eccd Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Wed, 11 Jan 2012 00:09:02 +0100 -Subject: [PATCH 5/7] cec: some TVs don't like us querying it while activating - sources. moved the queries to a background thread, and - only query after the TV reports power state active. - ---- - xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 102 +++++++++++++++------ - xbmc/peripherals/devices/PeripheralCecAdapter.h | 46 +++++++--- - 2 files changed, 108 insertions(+), 40 deletions(-) - -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -index 9cb195d..a8632f2 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -@@ -260,9 +260,8 @@ void CPeripheralCecAdapter::Process(void) - return; - } - -+ CAnnouncementManager::AddAnnouncer(m_cecAdapter); - CLog::Log(LOGDEBUG, "%s - connection to the CEC adapter opened", __FUNCTION__); -- m_bIsReady = true; -- CAnnouncementManager::AddAnnouncer(this); - - if (GetSettingBool("cec_power_on_startup")) - { -@@ -271,31 +270,8 @@ void CPeripheralCecAdapter::Process(void) - FlushLog(); - } - -- if (GetSettingBool("use_tv_menu_language")) -- { -- cec_menu_language language; -- if (m_cecAdapter->GetDeviceMenuLanguage(CECDEVICE_TV, &language)) -- SetMenuLanguage(language.language); -- } -- -- CStdString strNotification; -- cec_osd_name tvName = m_cecAdapter->GetDeviceOSDName(CECDEVICE_TV); -- strNotification.Format("%s: %s", g_localizeStrings.Get(36016), tvName.name); -- -- /* disable the mute setting when an amp is found, because the amp handles the mute setting and -- set PCM output to 100% */ -- if (HasConnectedAudioSystem()) -- { -- cec_osd_name ampName = m_cecAdapter->GetDeviceOSDName(CECDEVICE_AUDIOSYSTEM); -- CLog::Log(LOGDEBUG, "%s - CEC capable amplifier found (%s). volume will be controlled on the amp", __FUNCTION__, ampName.name); -- strNotification.AppendFormat(" - %s", ampName.name); -- -- g_settings.m_bMute = false; -- g_settings.m_nVolumeLevel = VOLUME_MAXIMUM; -- } -- -- m_cecAdapter->SetOSDString(CECDEVICE_TV, CEC_DISPLAY_CONTROL_DISPLAY_FOR_DEFAULT_TIME, g_localizeStrings.Get(36016).c_str()); -- CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), strNotification); -+ m_queryThread = new CPeripheralCecAdapterQueryThread(this); -+ m_queryThread->Create(false); - - while (!m_bStop) - { -@@ -304,10 +280,12 @@ void CPeripheralCecAdapter::Process(void) - ProcessNextCommand(); - if (!m_bStop) - ProcessVolumeChange(); -+ - if (!m_bStop) - Sleep(5); - } - -+ delete m_queryThread; - m_cecAdapter->Close(); - - CLog::Log(LOGDEBUG, "%s - CEC adapter processor thread ended", __FUNCTION__); -@@ -609,6 +587,15 @@ void CPeripheralCecAdapter::ProcessNextCommand(void) - } - } - break; -+ case CEC_OPCODE_REPORT_POWER_STATUS: -+ if (command.initiator == CECDEVICE_TV && -+ command.parameters.size == 1 && -+ command.parameters[0] == CEC_POWER_STATUS_ON && -+ m_queryThread) -+ { -+ m_queryThread->Signal(); -+ } -+ break; - default: - break; - } -@@ -916,4 +903,65 @@ bool CPeripheralCecAdapter::TranslateComPort(CStdString &strLocation) - - return false; - } -+ -+CPeripheralCecAdapterQueryThread::CPeripheralCecAdapterQueryThread(CPeripheralCecAdapter *adapter) : -+ CThread("CEC Adapter Query Thread"), -+ m_adapter(adapter) -+{ -+ m_event.Reset(); -+} -+ -+CPeripheralCecAdapterQueryThread::~CPeripheralCecAdapterQueryThread(void) -+{ -+ m_event.Set(); -+ StopThread(true); -+} -+ -+void CPeripheralCecAdapterQueryThread::Signal(void) -+{ -+ m_event.Set(); -+} -+ -+void CPeripheralCecAdapterQueryThread::Process(void) -+{ -+ bool bContinue(false); -+ do -+ { -+ m_event.WaitMSec(5000); -+ if (m_adapter->m_bStop) -+ return; -+ -+ if (m_adapter->m_cecAdapter->GetDevicePowerStatus(CECDEVICE_TV) == CEC_POWER_STATUS_ON) -+ bContinue = true; -+ }while(!bContinue); -+ -+ if (m_adapter->GetSettingBool("use_tv_menu_language")) -+ { -+ cec_menu_language language; -+ if (m_adapter->m_cecAdapter->GetDeviceMenuLanguage(CECDEVICE_TV, &language)) -+ m_adapter->SetMenuLanguage(language.language); -+ } -+ -+ CStdString strNotification; -+ cec_osd_name tvName = m_adapter->m_cecAdapter->GetDeviceOSDName(CECDEVICE_TV); -+ strNotification.Format("%s: %s", g_localizeStrings.Get(36016), tvName.name); -+ -+ /* disable the mute setting when an amp is found, because the amp handles the mute setting and -+ set PCM output to 100% */ -+ if (m_adapter->HasConnectedAudioSystem()) -+ { -+ cec_osd_name ampName = m_adapter->m_cecAdapter->GetDeviceOSDName(CECDEVICE_AUDIOSYSTEM); -+ CLog::Log(LOGDEBUG, "%s - CEC capable amplifier found (%s). volume will be controlled on the amp", __FUNCTION__, ampName.name); -+ strNotification.AppendFormat(" - %s", ampName.name); -+ -+ g_settings.m_bMute = false; -+ g_settings.m_nVolumeLevel = VOLUME_MAXIMUM; -+ } -+ -+ m_adapter->m_bIsReady = true; -+ -+ m_adapter->m_cecAdapter->SetOSDString(CECDEVICE_TV, CEC_DISPLAY_CONTROL_DISPLAY_FOR_DEFAULT_TIME, g_localizeStrings.Get(36016).c_str()); -+ CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), strNotification); -+} -+ - #endif -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.h b/xbmc/peripherals/devices/PeripheralCecAdapter.h -index 768e38a..f10f2ea 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.h -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.h -@@ -43,6 +43,8 @@ - - namespace PERIPHERALS - { -+ class CPeripheralCecAdapterQueryThread; -+ - typedef struct - { - WORD iButton; -@@ -59,6 +61,8 @@ - - class CPeripheralCecAdapter : public CPeripheralHID, public ANNOUNCEMENT::IAnnouncer, private CThread - { -+ friend class CPeripheralCecAdapterQueryThread; -+ - public: - CPeripheralCecAdapter(const PeripheralType type, const PeripheralBusType busType, const CStdString &strLocation, const CStdString &strDeviceName, int iVendorId, int iProductId); - virtual ~CPeripheralCecAdapter(void); -@@ -96,19 +100,35 @@ - static bool FindConfigLocation(CStdString &strString); - static bool TranslateComPort(CStdString &strPort); - -- DllLibCEC* m_dll; -- CEC::ICECAdapter* m_cecAdapter; -- bool m_bStarted; -- bool m_bHasButton; -- bool m_bIsReady; -- CStdString m_strMenuLanguage; -- CDateTime m_screensaverLastActivated; -- CecButtonPress m_button; -- std::queue m_buttonQueue; -- std::queue m_volumeChangeQueue; -- unsigned int m_lastKeypress; -- CecVolumeChange m_lastChange; -- CCriticalSection m_critSection; -+ DllLibCEC* m_dll; -+ CEC::ICECAdapter* m_cecAdapter; -+ bool m_bStarted; -+ bool m_bHasButton; -+ bool m_bIsReady; -+ CStdString m_strMenuLanguage; -+ CDateTime m_screensaverLastActivated; -+ CecButtonPress m_button; -+ std::queue m_buttonQueue; -+ std::queue m_volumeChangeQueue; -+ unsigned int m_lastKeypress; -+ CecVolumeChange m_lastChange; -+ CPeripheralCecAdapterQueryThread *m_queryThread; -+ CCriticalSection m_critSection; -+ }; -+ -+ class CPeripheralCecAdapterQueryThread : public CThread -+ { -+ public: -+ CPeripheralCecAdapterQueryThread(CPeripheralCecAdapter *adapter); -+ virtual ~CPeripheralCecAdapterQueryThread(void); -+ -+ virtual void Signal(void); -+ -+ protected: -+ virtual void Process(void); -+ -+ CPeripheralCecAdapter *m_adapter; -+ CEvent m_event; - }; - } - --- -1.7.5.4 - - -From a621adb7400a65fca4afc9e25a3849de5cbd5d4e Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Thu, 12 Jan 2012 22:22:17 +0100 -Subject: [PATCH 6/7] cec: use callback methods instead of constant polling. - this requires libCEC 1.4.0 or higher - ---- - xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 123 ++++++++++++--------- - xbmc/peripherals/devices/PeripheralCecAdapter.h | 10 +- - 2 files changed, 76 insertions(+), 57 deletions(-) - -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -index a8632f2..13338bb 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp -@@ -121,7 +121,6 @@ class DllLibCEC : public DllDynamic, DllLibCECInterface - - if (m_cecAdapter) - { -- FlushLog(); - m_dll->CECDestroy(m_cecAdapter); - m_cecAdapter = NULL; - } -@@ -169,7 +168,6 @@ void CPeripheralCecAdapter::Announce(EAnnouncementFlag flag, const char *sender, - if (!m_cecAdapter->Open(strPort.c_str(), 10000)) - { - CLog::Log(LOGERROR, "%s - failed to reconnect to the CEC adapter", __FUNCTION__); -- FlushLog(); - m_bStop = true; - } - else -@@ -237,11 +235,12 @@ void CPeripheralCecAdapter::Process(void) - if (strPort.empty()) - return; - -+ EnableCallbacks(); -+ - // set correct physical address from peripheral settings - int iDevice = GetSettingInt("connected_device"); - int iHdmiPort = GetSettingInt("cec_hdmi_port"); - m_cecAdapter->SetHDMIPort((cec_logical_address)iDevice, iHdmiPort); -- FlushLog(); - - // open the CEC adapter - CLog::Log(LOGDEBUG, "%s - opening a connection to the CEC adapter: %s", __FUNCTION__, strPort.c_str()); -@@ -253,21 +252,19 @@ void CPeripheralCecAdapter::Process(void) - - if (!m_cecAdapter->Open(strPort.c_str(), 10000)) - { -- FlushLog(); - CLog::Log(LOGERROR, "%s - could not opening a connection to the CEC adapter", __FUNCTION__); - CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(36000), g_localizeStrings.Get(36012)); - m_bStarted = false; - return; - } - -- CAnnouncementManager::AddAnnouncer(m_cecAdapter); -+ CAnnouncementManager::AddAnnouncer(this); - CLog::Log(LOGDEBUG, "%s - connection to the CEC adapter opened", __FUNCTION__); - - if (GetSettingBool("cec_power_on_startup")) - { - PowerOnCecDevices(CECDEVICE_TV); - m_cecAdapter->SetActiveSource(); -- FlushLog(); - } - - m_queryThread = new CPeripheralCecAdapterQueryThread(this); -@@ -275,9 +272,6 @@ void CPeripheralCecAdapter::Process(void) - - while (!m_bStop) - { -- FlushLog(); -- if (!m_bStop) -- ProcessNextCommand(); - if (!m_bStop) - ProcessVolumeChange(); - -@@ -524,10 +518,13 @@ void CPeripheralCecAdapter::SetMenuLanguage(const char *strLanguage) - CLog::Log(LOGWARNING, "%s - TV menu language set to unknown value '%s'", __FUNCTION__, strLanguage); - } - --void CPeripheralCecAdapter::ProcessNextCommand(void) -+int CPeripheralCecAdapter::CecCommand(void *cbParam, const cec_command &command) - { -- cec_command command; -- if (m_cecAdapter && m_bIsReady && m_cecAdapter->GetNextCommand(&command)) -+ CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam; -+ if (!adapter) -+ return 0; -+ -+ if (adapter->m_bIsReady) - { - CLog::Log(LOGDEBUG, "%s - processing command: initiator=%1x destination=%1x opcode=%02x", __FUNCTION__, command.initiator, command.destination, command.opcode); - -@@ -536,21 +533,21 @@ void CPeripheralCecAdapter::ProcessNextCommand(void) - case CEC_OPCODE_STANDBY: - /* a device was put in standby mode */ - CLog::Log(LOGDEBUG, "%s - device %1x was put in standby mode", __FUNCTION__, command.initiator); -- if (command.initiator == CECDEVICE_TV && GetSettingBool("standby_pc_on_tv_standby") && -- (!m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT))) -+ if (command.initiator == CECDEVICE_TV && adapter->GetSettingBool("standby_pc_on_tv_standby") && -+ (!adapter->m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT))) - { -- m_bStarted = false; -+ adapter->m_bStarted = false; - g_application.getApplicationMessenger().Suspend(); - } - break; - case CEC_OPCODE_SET_MENU_LANGUAGE: -- if (GetSettingBool("use_tv_menu_language") && command.initiator == CECDEVICE_TV && command.parameters.size == 3) -+ if (adapter->GetSettingBool("use_tv_menu_language") && command.initiator == CECDEVICE_TV && command.parameters.size == 3) - { - char strNewLanguage[4]; - for (int iPtr = 0; iPtr < 3; iPtr++) - strNewLanguage[iPtr] = command.parameters[iPtr]; - strNewLanguage[3] = 0; -- SetMenuLanguage(strNewLanguage); -+ adapter->SetMenuLanguage(strNewLanguage); - } - break; - case CEC_OPCODE_DECK_CONTROL: -@@ -558,11 +555,11 @@ void CPeripheralCecAdapter::ProcessNextCommand(void) - command.parameters.size == 1 && - command.parameters[0] == CEC_DECK_CONTROL_MODE_STOP) - { -- CSingleLock lock(m_critSection); -+ CSingleLock lock(adapter->m_critSection); - cec_keypress key; - key.duration = 500; - key.keycode = CEC_USER_CONTROL_CODE_STOP; -- m_buttonQueue.push(key); -+ adapter->m_buttonQueue.push(key); - } - break; - case CEC_OPCODE_PLAY: -@@ -571,19 +568,19 @@ void CPeripheralCecAdapter::ProcessNextCommand(void) - { - if (command.parameters[0] == CEC_PLAY_MODE_PLAY_FORWARD) - { -- CSingleLock lock(m_critSection); -+ CSingleLock lock(adapter->m_critSection); - cec_keypress key; - key.duration = 500; - key.keycode = CEC_USER_CONTROL_CODE_PLAY; -- m_buttonQueue.push(key); -+ adapter->m_buttonQueue.push(key); - } - else if (command.parameters[0] == CEC_PLAY_MODE_PLAY_STILL) - { -- CSingleLock lock(m_critSection); -+ CSingleLock lock(adapter->m_critSection); - cec_keypress key; - key.duration = 500; - key.keycode = CEC_USER_CONTROL_CODE_PAUSE; -- m_buttonQueue.push(key); -+ adapter->m_buttonQueue.push(key); - } - } - break; -@@ -591,15 +588,27 @@ void CPeripheralCecAdapter::ProcessNextCommand(void) - if (command.initiator == CECDEVICE_TV && - command.parameters.size == 1 && - command.parameters[0] == CEC_POWER_STATUS_ON && -- m_queryThread) -+ adapter->m_queryThread) - { -- m_queryThread->Signal(); -+ adapter->m_queryThread->Signal(); - } - break; - default: - break; - } - } -+ return 1; -+} -+ -+int CPeripheralCecAdapter::CecKeyPress(void *cbParam, const cec_keypress &key) -+{ -+ CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam; -+ if (!adapter) -+ return 0; -+ -+ CSingleLock lock(adapter->m_critSection); -+ adapter->m_buttonQueue.push(key); -+ return 1; - } - - bool CPeripheralCecAdapter::GetNextCecKey(cec_keypress &key) -@@ -612,10 +621,6 @@ bool CPeripheralCecAdapter::GetNextCecKey(cec_keypress &key) - m_buttonQueue.pop(); - bReturn = true; - } -- else if (m_cecAdapter->GetNextKeypress(&key)) -- { -- bReturn = true; -- } - - return bReturn; - } -@@ -861,35 +866,37 @@ void CPeripheralCecAdapter::OnSettingChanged(const CStdString &strChangedSetting - } - } - --void CPeripheralCecAdapter::FlushLog(void) -+int CPeripheralCecAdapter::CecLogMessage(void *cbParam, const cec_log_message &message) - { -- cec_log_message message; -- while (m_cecAdapter && m_cecAdapter->GetNextLogMessage(&message)) -+ CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam; -+ if (!adapter) -+ return 0; -+ -+ int iLevel = -1; -+ switch (message.level) - { -- int iLevel = -1; -- switch (message.level) -- { -- case CEC_LOG_ERROR: -- iLevel = LOGERROR; -- break; -- case CEC_LOG_WARNING: -- iLevel = LOGWARNING; -- break; -- case CEC_LOG_NOTICE: -+ case CEC_LOG_ERROR: -+ iLevel = LOGERROR; -+ break; -+ case CEC_LOG_WARNING: -+ iLevel = LOGWARNING; -+ break; -+ case CEC_LOG_NOTICE: -+ iLevel = LOGDEBUG; -+ break; -+ case CEC_LOG_TRAFFIC: -+ case CEC_LOG_DEBUG: -+ if (adapter->GetSettingBool("cec_debug_logging")) - iLevel = LOGDEBUG; -- break; -- case CEC_LOG_TRAFFIC: -- case CEC_LOG_DEBUG: -- if (GetSettingBool("cec_debug_logging")) -- iLevel = LOGDEBUG; -- break; -- default: -- break; -- } -- -- if (iLevel >= 0) -- CLog::Log(iLevel, "%s - %s", __FUNCTION__, message.message); -+ break; -+ default: -+ break; - } -+ -+ if (iLevel >= 0) -+ CLog::Log(iLevel, "%s - %s", __FUNCTION__, message.message); -+ -+ return 1; - } - - bool CPeripheralCecAdapter::TranslateComPort(CStdString &strLocation) -@@ -964,4 +971,12 @@ void CPeripheralCecAdapterQueryThread::Process(void) - CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, g_localizeStrings.Get(36000), strNotification); - } - -+void CPeripheralCecAdapter::EnableCallbacks(void) -+{ -+ m_callbacks.CBCecLogMessage = &CecLogMessage; -+ m_callbacks.CBCecKeyPress = &CecKeyPress; -+ m_callbacks.CBCecCommand = &CecCommand; -+ m_cecAdapter->EnableCallbacks(this, &m_callbacks); -+} -+ - #endif -diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.h b/xbmc/peripherals/devices/PeripheralCecAdapter.h -index f10f2ea..085b683 100644 ---- a/xbmc/peripherals/devices/PeripheralCecAdapter.h -+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.h -@@ -89,12 +89,15 @@ - virtual CStdString GetComPort(void); - - protected: -- virtual void FlushLog(void); -- virtual bool GetNextCecKey(CEC::cec_keypress &key); -+ virtual void EnableCallbacks(void); -+ static int CecKeyPress(void *cbParam, const CEC::cec_keypress &key); -+ static int CecLogMessage(void *cbParam, const CEC::cec_log_message &message); -+ static int CecCommand(void *cbParam, const CEC::cec_command &command); -+ - virtual bool GetNextKey(void); -+ virtual bool GetNextCecKey(CEC::cec_keypress &key); - virtual bool InitialiseFeature(const PeripheralFeature feature); - virtual void Process(void); -- virtual void ProcessNextCommand(void); - virtual void ProcessVolumeChange(void); - virtual void SetMenuLanguage(const char *strLanguage); - static bool FindConfigLocation(CStdString &strString); -@@ -113,6 +116,7 @@ - unsigned int m_lastKeypress; - CecVolumeChange m_lastChange; - CPeripheralCecAdapterQueryThread *m_queryThread; -+ CEC::ICECCallbacks m_callbacks; - CCriticalSection m_critSection; - }; - --- -1.7.5.4 - - -From 51ab157f8dbc79c3c5e13d589b8523c5d59cb48e Mon Sep 17 00:00:00 2001 -From: Lars Op den Kamp -Date: Thu, 12 Jan 2012 22:22:37 +0100 -Subject: [PATCH 7/7] cec: these new features and fixes need libCEC v1.4.0 or - higher - ---- - configure.in | 2 +- - lib/libcec/Makefile | 2 +- - project/BuildDependencies/scripts/libcec_d.txt | 2 +- - tools/darwin/depends/libcec/Makefile | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/configure.in b/configure.in -index bca9239..d6909cd 100755 ---- a/configure.in -+++ b/configure.in -@@ -1173,7 +1173,7 @@ if test "x$use_libcec" != "xno"; then - - # libcec is dyloaded, so we need to check for its headers and link any depends. - if test "x$use_libcec" != "xno"; then -- PKG_CHECK_MODULES([CEC],[libcec >= 1.1.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)]) -+ PKG_CHECK_MODULES([CEC],[libcec >= 1.4.0],,[use_libcec="no";AC_MSG_RESULT($libcec_disabled)]) - - if test "x$use_libcec" != "xno"; then - INCLUDES="$INCLUDES $CEC_CFLAGS" -diff --git a/lib/libcec/Makefile b/lib/libcec/Makefile -index 8776161..5ca2a54 100644 ---- a/lib/libcec/Makefile -+++ b/lib/libcec/Makefile -@@ -7,7 +7,7 @@ - - # lib name, version - LIBNAME=libcec --VERSION=1.2.0 -+VERSION=1.4.0 - SOURCE=$(LIBNAME)-$(VERSION) - - # download location and format -diff --git a/project/BuildDependencies/scripts/libcec_d.txt b/project/BuildDependencies/scripts/libcec_d.txt -index ec9df80..867d639 100644 -diff --git a/tools/darwin/depends/libcec/Makefile b/tools/darwin/depends/libcec/Makefile -index c6b44c0..e72dc10 100644 ---- a/tools/darwin/depends/libcec/Makefile -+++ b/tools/darwin/depends/libcec/Makefile -@@ -2,7 +2,7 @@ include ../Makefile.include - - # lib name, version - LIBNAME=libcec --VERSION=1.2.0 -+VERSION=1.4.0 - SOURCE=$(LIBNAME)-$(VERSION) - ARCHIVE=$(SOURCE).tar.gz - --- -1.7.5.4 - diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-001-add_support_to_specify_GIT_REV-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-001-add_support_to_specify_GIT_REV-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-001-add_support_to_specify_GIT_REV-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-001-add_support_to_specify_GIT_REV-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-303-fix_libdvd_xFLAGS-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-311-fix_rsxs_build-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-311-fix_rsxs_build-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-311-fix_rsxs_build-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-311-fix_rsxs_build-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-402-enable_yasm_in_ffmpeg-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-404-add_lame_check-0.6.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-404-add_lame_check-0.6.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-404-add_lame_check-0.6.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-404-add_lame_check-0.6.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-452-change_lcd_content-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-453-add_openelec.tv_RSS_news-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-453-add_openelec.tv_RSS_news-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-453-add_openelec.tv_RSS_news-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-454-disable_backslash-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-454-disable_backslash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-454-disable_backslash-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-454-disable_backslash-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-457-fix_connection_check-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-457-fix_connection_check-0.1.patch similarity index 59% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-457-fix_connection_check-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-457-fix_connection_check-0.1.patch index f4982ec635..9488def289 100644 --- a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-457-fix_connection_check-0.1.patch +++ b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-457-fix_connection_check-0.1.patch @@ -1,6 +1,6 @@ -diff -Naur xbmc-10.1-Dharma/xbmc/FileSystem/FileCurl.cpp xbmc-10.1-Dharma.patch/xbmc/FileSystem/FileCurl.cpp ---- xbmc-10.1-Dharma/xbmc/filesystem/FileCurl.cpp 2011-03-08 02:49:14.000000000 +0100 -+++ xbmc-10.1-Dharma.patch/xbmc/filesystem/FileCurl.cpp 2011-10-17 19:21:04.180783870 +0200 +diff -Naur a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp +--- a/xbmc/filesystem/CurlFile.cpp 2011-03-08 02:49:14.000000000 +0100 ++++ b/xbmc/filesystem/CurlFile.cpp 2011-10-17 19:21:04.180783870 +0200 @@ -803,9 +803,9 @@ // Detect whether we are "online" or not! Very simple and dirty! bool CFileCurl::IsInternet(bool checkDNS /* = true */) diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-462-add_remote_irtrans_mediacenter-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-463-add_remote_devinput-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-464-add_eject_keymapping_for_lirc-0.1.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-464-add_eject_keymapping_for_lirc-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-464-add_eject_keymapping_for_lirc-0.1.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-464-add_eject_keymapping_for_lirc-0.1.patch diff --git a/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-981-toggleButtonState.patch b/packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-981-toggleButtonState.patch similarity index 100% rename from packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-28cdd20-981-toggleButtonState.patch rename to packages/mediacenter/xbmc-rpi/patches/xbmc-rpi-d8a02e0-981-toggleButtonState.patch