mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-31 14:37:59 +00:00
xbmc-pvr: update libcec patches
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
b808ed0e6a
commit
e4cec82495
File diff suppressed because it is too large
Load Diff
@ -1,624 +0,0 @@
|
||||
From 94ec6e9f96f23613da43a8cb14352d0fbd99f552 Mon Sep 17 00:00:00 2001
|
||||
From: Lars Op den Kamp <lars@opdenkamp.eu>
|
||||
Date: Sun, 11 Dec 2011 23:42:17 +0100
|
||||
Subject: [PATCH 1/5] 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 | 128 ++++++++++++++++++++-
|
||||
xbmc/peripherals/devices/PeripheralCecAdapter.h | 17 +++
|
||||
4 files changed, 208 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
|
||||
index 0e0511e..2cfb8d3 100644
|
||||
--- a/xbmc/Application.cpp
|
||||
+++ b/xbmc/Application.cpp
|
||||
@@ -2592,6 +2592,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<CPeripheral *> 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
|
||||
@@ -5031,11 +5051,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<CPeripheral *> 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<CPeripheral *> 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
|
||||
@@ -5044,6 +5102,9 @@ void CApplication::ToggleMute(void)
|
||||
|
||||
void CApplication::Mute()
|
||||
{
|
||||
+ if (CecMute())
|
||||
+ return;
|
||||
+
|
||||
g_settings.m_iPreMuteVolumeLevel = GetVolume();
|
||||
SetVolume(0);
|
||||
g_settings.m_bMute = true;
|
||||
@@ -5051,6 +5112,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 7688de7..26552ba 100644
|
||||
--- a/xbmc/Application.h
|
||||
+++ b/xbmc/Application.h
|
||||
@@ -172,6 +172,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 21eb069..868a27c 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 <cec.h>
|
||||
@@ -72,7 +73,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;
|
||||
@@ -284,8 +286,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)
|
||||
{
|
||||
@@ -293,6 +311,8 @@ void CPeripheralCecAdapter::Process(void)
|
||||
if (!m_bStop)
|
||||
ProcessNextCommand();
|
||||
if (!m_bStop)
|
||||
+ ProcessVolumeChange();
|
||||
+ if (!m_bStop)
|
||||
Sleep(5);
|
||||
}
|
||||
|
||||
@@ -354,6 +374,110 @@ 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);
|
||||
+}
|
||||
+
|
||||
+void CPeripheralCecAdapter::ScheduleVolumeDown(void)
|
||||
+{
|
||||
+ CSingleLock lock(m_critSection);
|
||||
+ m_volumeChangeQueue.push(VOLUME_CHANGE_DOWN);
|
||||
+}
|
||||
+
|
||||
+void CPeripheralCecAdapter::ScheduleMute(void)
|
||||
+{
|
||||
+ CSingleLock lock(m_critSection);
|
||||
+ m_volumeChangeQueue.push(VOLUME_CHANGE_MUTE);
|
||||
+}
|
||||
+
|
||||
+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 */
|
||||
+ if (pendingVolumeChange == VOLUME_CHANGE_NONE)
|
||||
+ {
|
||||
+ pendingVolumeChange = m_volumeChangeQueue.front();
|
||||
+ m_volumeChangeQueue.pop();
|
||||
+ }
|
||||
+
|
||||
+ /* remove all dupe entries */
|
||||
+ while (m_volumeChangeQueue.size() > 0 && m_volumeChangeQueue.front() == pendingVolumeChange)
|
||||
+ m_volumeChangeQueue.pop();
|
||||
+
|
||||
+ m_lastKeypress = XbmcThreads::SystemClockMillis();
|
||||
+
|
||||
+ /* only send the keypress when it hasn't been sent yet */
|
||||
+ if (pendingVolumeChange != m_lastChange)
|
||||
+ m_lastChange = pendingVolumeChange;
|
||||
+ else
|
||||
+ pendingVolumeChange = VOLUME_CHANGE_NONE;
|
||||
+ }
|
||||
+ else if (m_lastKeypress > 0 && m_lastKeypress + CEC_BUTTON_TIMEOUT < XbmcThreads::SystemClockMillis())
|
||||
+ {
|
||||
+ /* send a key release */
|
||||
+ bSendRelease = true;
|
||||
+ m_lastKeypress = 0;
|
||||
+ 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<CEC::cec_keypress> m_buttonQueue;
|
||||
+ std::queue<CecVolumeChange> m_volumeChangeQueue;
|
||||
unsigned int m_lastKeypress;
|
||||
+ CecVolumeChange m_lastChange;
|
||||
CCriticalSection m_critSection;
|
||||
};
|
||||
}
|
||||
--
|
||||
1.7.5.4
|
||||
|
||||
|
||||
From 35730475f96d0482b7a101cc49da6cc9d1894351 Mon Sep 17 00:00:00 2001
|
||||
From: Lars Op den Kamp <lars@opdenkamp.eu>
|
||||
Date: Sun, 11 Dec 2011 23:43:17 +0100
|
||||
Subject: [PATCH 2/5] 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
|
||||
|
||||
---
|
||||
system/peripherals.xml | 1 +
|
||||
xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 13 +++++++------
|
||||
xbmc/peripherals/devices/PeripheralCecAdapter.h | 2 +-
|
||||
3 files changed, 9 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/system/peripherals.xml b/system/peripherals.xml
|
||||
index f5cf50d..3882256 100644
|
||||
--- a/system/peripherals.xml
|
||||
+++ b/system/peripherals.xml
|
||||
@@ -18,5 +18,6 @@
|
||||
<setting key="standby_pc_on_tv_standby" type="bool" value="1" label="36014" />
|
||||
<setting key="cec_debug_logging" type="bool" value="0" label="20191" />
|
||||
<setting key="use_tv_menu_language" type="bool" value="1" label="36018" />
|
||||
+ <setting key="connected_device" type="int" label="21373" value="0" min="0" max="15" step="1" />
|
||||
</peripheral>
|
||||
</peripherals>
|
||||
diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
index 868a27c..d0c4e6c 100644
|
||||
--- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
@@ -248,8 +248,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);
|
||||
+ SetHdmiPort(iDevice, iHdmiPort);
|
||||
FlushLog();
|
||||
|
||||
// open the CEC adapter
|
||||
@@ -360,15 +361,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;
|
||||
@@ -861,9 +862,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 010c90708d5fe891feed31913382150757de5b2a Mon Sep 17 00:00:00 2001
|
||||
From: Lars Op den Kamp <lars@opdenkamp.eu>
|
||||
Date: Sun, 11 Dec 2011 23:44:29 +0100
|
||||
Subject: [PATCH 3/5] cec: audiosystem control and the previous commit require
|
||||
libcec v1.3 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 e7045ba..f6c28ca 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.3.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..0b6f322 100644
|
||||
--- a/lib/libcec/Makefile
|
||||
+++ b/lib/libcec/Makefile
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
# lib name, version
|
||||
LIBNAME=libcec
|
||||
-VERSION=1.2.0
|
||||
+VERSION=1.3.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..fab03c5 100644
|
||||
diff --git a/tools/darwin/depends/libcec/Makefile b/tools/darwin/depends/libcec/Makefile
|
||||
index c6b44c0..38f9162 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.3.0
|
||||
SOURCE=$(LIBNAME)-$(VERSION)
|
||||
ARCHIVE=$(SOURCE).tar.gz
|
||||
|
||||
--
|
||||
1.7.5.4
|
||||
|
||||
|
||||
From 732175d6474da5a9f698fadd8c21617e8783bb6c Mon Sep 17 00:00:00 2001
|
||||
From: Lars Op den Kamp <lars@opdenkamp.eu>
|
||||
Date: Wed, 21 Dec 2011 00:05:54 +0100
|
||||
Subject: [PATCH 4/5] cec: improved the volume change response time
|
||||
|
||||
---
|
||||
xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 33 ++++++++++++--------
|
||||
1 files changed, 20 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
index d0c4e6c..9a49a46 100644
|
||||
--- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
@@ -382,20 +382,29 @@ bool CPeripheralCecAdapter::HasConnectedAudioSystem(void)
|
||||
|
||||
void CPeripheralCecAdapter::ScheduleVolumeUp(void)
|
||||
{
|
||||
- CSingleLock lock(m_critSection);
|
||||
- m_volumeChangeQueue.push(VOLUME_CHANGE_UP);
|
||||
+ {
|
||||
+ 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);
|
||||
+ {
|
||||
+ 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);
|
||||
+ {
|
||||
+ CSingleLock lock(m_critSection);
|
||||
+ m_volumeChangeQueue.push(VOLUME_CHANGE_MUTE);
|
||||
+ }
|
||||
+ Sleep(5);
|
||||
}
|
||||
|
||||
void CPeripheralCecAdapter::ProcessVolumeChange(void)
|
||||
@@ -407,20 +416,19 @@ void CPeripheralCecAdapter::ProcessVolumeChange(void)
|
||||
if (m_volumeChangeQueue.size() > 0)
|
||||
{
|
||||
/* get the first change from the queue */
|
||||
- if (pendingVolumeChange == VOLUME_CHANGE_NONE)
|
||||
- {
|
||||
- pendingVolumeChange = m_volumeChangeQueue.front();
|
||||
- m_volumeChangeQueue.pop();
|
||||
- }
|
||||
+ 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 CEC_BUTTON_TIMEOUT ms */
|
||||
+ bool bRefresh(m_lastKeypress + CEC_BUTTON_TIMEOUT < XbmcThreads::SystemClockMillis());
|
||||
m_lastKeypress = XbmcThreads::SystemClockMillis();
|
||||
|
||||
/* only send the keypress when it hasn't been sent yet */
|
||||
- if (pendingVolumeChange != m_lastChange)
|
||||
+ if (pendingVolumeChange != m_lastChange || bRefresh)
|
||||
m_lastChange = pendingVolumeChange;
|
||||
else
|
||||
pendingVolumeChange = VOLUME_CHANGE_NONE;
|
||||
@@ -429,7 +437,6 @@ void CPeripheralCecAdapter::ProcessVolumeChange(void)
|
||||
{
|
||||
/* send a key release */
|
||||
bSendRelease = true;
|
||||
- m_lastKeypress = 0;
|
||||
m_lastChange = VOLUME_CHANGE_NONE;
|
||||
}
|
||||
}
|
||||
--
|
||||
1.7.5.4
|
||||
|
||||
|
||||
From a7f0ec61297ce7b832576c97a641a7baa5d0f9b3 Mon Sep 17 00:00:00 2001
|
||||
From: Lars Op den Kamp <lars@opdenkamp.eu>
|
||||
Date: Tue, 20 Dec 2011 21:17:46 +0100
|
||||
Subject: [PATCH 5/5] cec: don't send playstate updates, but always keep the
|
||||
default playstate. fixes buttons becoming deactivated
|
||||
on some TVs. it also wasn't very fast, which resulted
|
||||
in delays when starting/stopping playback
|
||||
|
||||
---
|
||||
xbmc/peripherals/devices/PeripheralCecAdapter.cpp | 15 ---------------
|
||||
1 files changed, 0 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
index 9a49a46..8990478 100644
|
||||
--- a/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
+++ b/xbmc/peripherals/devices/PeripheralCecAdapter.cpp
|
||||
@@ -175,21 +175,6 @@ void CPeripheralCecAdapter::Announce(EAnnouncementFlag flag, const char *sender,
|
||||
}
|
||||
}
|
||||
}
|
||||
- else if (flag == Player && !strcmp(sender, "xbmc") && !strcmp(message, "OnStop"))
|
||||
- {
|
||||
- m_cecAdapter->SetDeckControlMode(CEC_DECK_CONTROL_MODE_STOP, false);
|
||||
- m_cecAdapter->SetDeckInfo(CEC_DECK_INFO_STOP);
|
||||
- }
|
||||
- else if (flag == Player && !strcmp(sender, "xbmc") && !strcmp(message, "OnPause"))
|
||||
- {
|
||||
- m_cecAdapter->SetDeckControlMode(CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND, false);
|
||||
- m_cecAdapter->SetDeckInfo(CEC_DECK_INFO_STILL);
|
||||
- }
|
||||
- else if (flag == Player && !strcmp(sender, "xbmc") && !strcmp(message, "OnPlay"))
|
||||
- {
|
||||
- m_cecAdapter->SetDeckControlMode(CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND, false);
|
||||
- m_cecAdapter->SetDeckInfo(CEC_DECK_INFO_PLAY);
|
||||
- }
|
||||
}
|
||||
|
||||
bool CPeripheralCecAdapter::InitialiseFeature(const PeripheralFeature feature)
|
||||
--
|
||||
1.7.5.4
|
||||
|
Loading…
x
Reference in New Issue
Block a user