xbmc-pvr: update libcec patches

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2012-01-18 17:24:29 +01:00
parent b808ed0e6a
commit e4cec82495
2 changed files with 1152 additions and 624 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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