Skip to content

Commit b476a41

Browse files
Neethu379aishwariya15
authored andcommitted
RDKTV-32538: The HDMI volume Icon is not smooth
Reason for change: Optimize Audio Status Request on Volume Key Press Test Procedure: refer the ticket Risks: None Signed-off-by: Neethu A S [email protected]
1 parent 17b0818 commit b476a41

File tree

2 files changed

+75
-8
lines changed

2 files changed

+75
-8
lines changed

HdmiCecSink/HdmiCecSink.cpp

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
#define HDMICECSINK_NUMBER_TV_ADDR 2
7676
#define HDMICECSINK_UPDATE_POWER_STATUS_INTERVA_MS (60 * 1000)
7777
#define HDMISINK_ARC_START_STOP_MAX_WAIT_MS 4000
78+
#define HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS 500
7879

7980

8081
#define SAD_FMT_CODE_AC3 2
@@ -173,10 +174,8 @@ static std::vector<RcProfile> rcProfile = {RC_PROFILE_TV};
173174
static std::vector<DeviceFeatures> deviceFeatures = {DEVICE_FEATURES_TV};
174175

175176
#define API_VERSION_NUMBER_MAJOR 1
176-
#define API_VERSION_NUMBER_MINOR 3
177-
#define API_VERSION_NUMBER_PATCH 8
178-
179-
using PowerState = WPEFramework::Exchange::IPowerManager::PowerState;
177+
#define API_VERSION_NUMBER_MINOR 4
178+
#define API_VERSION_NUMBER_PATCH 0
180179

181180
namespace WPEFramework
182181
{
@@ -710,7 +709,10 @@ namespace WPEFramework
710709
m_currentActiveSource = -1;
711710
m_isHdmiInConnected = false;
712711
hdmiCecAudioDeviceConnected = false;
713-
m_audioDevicePowerStatusRequested = false;
712+
m_isAudioStatusInfoUpdated = false;
713+
m_audioStatusReceived = false;
714+
m_audioStatusTimerStarted = false;
715+
m_audioDevicePowerStatusRequested = false;
714716
m_pollNextState = POLL_THREAD_STATE_NONE;
715717
m_pollThreadState = POLL_THREAD_STATE_NONE;
716718
m_video_latency = DEFAULT_VIDEO_LATENCY;
@@ -758,6 +760,8 @@ namespace WPEFramework
758760
m_semSignaltoArcRoutingThread.acquire();
759761
m_arcRoutingThread = std::thread(threadArcRouting);
760762

763+
m_audioStatusDetectionTimer.connect( std::bind( &HdmiCecSink::audioStatusTimerFunction, this ) );
764+
m_audioStatusDetectionTimer.setSingleShot(true);
761765
m_arcStartStopTimer.connect( std::bind( &HdmiCecSink::arcStartStopTimerFunction, this ) );
762766
m_arcStartStopTimer.setSingleShot(true);
763767
// get power state:
@@ -1146,6 +1150,18 @@ namespace WPEFramework
11461150
JsonObject params;
11471151
if(!HdmiCecSink::_instance)
11481152
return;
1153+
if (m_audioStatusTimerStarted)
1154+
{
1155+
m_audioStatusReceived = true;
1156+
m_isAudioStatusInfoUpdated = true;
1157+
m_audioStatusTimerStarted = false;
1158+
if (m_audioStatusDetectionTimer.isActive())
1159+
{
1160+
LOGINFO("AudioStatus received from the Audio Device and the timer is still active. So stopping the timer!\n");
1161+
m_audioStatusDetectionTimer.stop();
1162+
}
1163+
LOGINFO("AudioStatus received from the Audio Device. Updating the AudioStatus info! m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
1164+
}
11491165
LOGINFO("Command: ReportAudioStatus %s audio Mute status %d means %s and current Volume level is %d \n",GetOpName(msg.opCode()),msg.status.getAudioMuteStatus(),msg.status.toString().c_str(),msg.status.getAudioVolume());
11501166
params["muteStatus"] = msg.status.getAudioMuteStatus();
11511167
params["volumeLevel"] = msg.status.getAudioVolume();
@@ -2476,7 +2492,14 @@ namespace WPEFramework
24762492
params["status"] = string("success");
24772493
params["audioDeviceConnected"] = string("false");
24782494
hdmiCecAudioDeviceConnected = false;
2479-
sendNotify(eventString[HDMICECSINK_EVENT_AUDIO_DEVICE_CONNECTED_STATUS], params);
2495+
if (m_audioStatusDetectionTimer.isActive()){
2496+
m_audioStatusDetectionTimer.stop();
2497+
}
2498+
m_isAudioStatusInfoUpdated = false;
2499+
m_audioStatusReceived = false;
2500+
m_audioStatusTimerStarted = false;
2501+
LOGINFO("Audio device removed, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
2502+
sendNotify(eventString[HDMICECSINK_EVENT_AUDIO_DEVICE_CONNECTED_STATUS], params)
24802503
}
24812504

24822505
_instance->deviceList[logicalAddress].m_isRequestRetry = 0;
@@ -3093,6 +3116,14 @@ namespace WPEFramework
30933116

30943117
m_logicalAddressAllocated = LogicalAddress::UNREGISTERED;
30953118
m_currentArcRoutingState = ARC_STATE_ARC_TERMINATED;
3119+
if (m_audioStatusDetectionTimer.isActive()){
3120+
m_audioStatusDetectionTimer.stop();
3121+
}
3122+
m_isAudioStatusInfoUpdated = false;
3123+
m_audioStatusReceived = false;
3124+
m_audioStatusTimerStarted = false;
3125+
LOGINFO("CEC Disabled, reset the audio status info. m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
3126+
30963127

30973128
for(int i=0; i< 16; i++)
30983129
{
@@ -3348,12 +3379,43 @@ namespace WPEFramework
33483379

33493380
if((_instance->m_SendKeyQueue.size()<=1 || (_instance->m_SendKeyQueue.size() % 2 == 0)) && ((keyInfo.keyCode == VOLUME_UP) || (keyInfo.keyCode == VOLUME_DOWN) || (keyInfo.keyCode == MUTE)) )
33503381
{
3351-
_instance->sendGiveAudioStatusMsg();
3352-
}
3382+
if(keyInfo.keyCode == MUTE)
3383+
{
3384+
_instance->sendGiveAudioStatusMsg();
3385+
}
3386+
else
3387+
{
3388+
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ",_instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
3389+
if (!_instance->m_isAudioStatusInfoUpdated)
3390+
{
3391+
if ( !(_instance->m_audioStatusDetectionTimer.isActive()))
3392+
{
3393+
LOGINFO("Audio status info not updated. Starting the Timer!");
3394+
_instance->m_audioStatusTimerStarted = true;
3395+
_instance->m_audioStatusDetectionTimer.start((HDMICECSINK_UPDATE_AUDIO_STATUS_INTERVAL_MS));
3396+
}
3397+
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", _instance->m_isAudioStatusInfoUpdated,_instance->m_audioStatusReceived,_instance->m_audioStatusTimerStarted);
3398+
}
3399+
else
3400+
{
3401+
if (!_instance->m_audioStatusReceived){
3402+
_instance->sendGiveAudioStatusMsg();
3403+
}
3404+
}
3405+
}
3406+
}
33533407

33543408
}//while(!_instance->m_sendKeyEventThreadExit)
33553409
}//threadSendKeyEvent
33563410

3411+
void HdmiCecSink::audioStatusTimerFunction()
3412+
{
3413+
m_audioStatusTimerStarted = false;
3414+
m_isAudioStatusInfoUpdated = true;
3415+
LOGINFO("Timer Expired. Requesting the AudioStatus since not received.\n");
3416+
sendGiveAudioStatusMsg();
3417+
LOGINFO("m_isAudioStatusInfoUpdated :%d, m_audioStatusReceived :%d, m_audioStatusTimerStarted:%d ", m_isAudioStatusInfoUpdated,m_audioStatusReceived,m_audioStatusTimerStarted);
3418+
}
33573419

33583420
void HdmiCecSink::threadArcRouting()
33593421
{

HdmiCecSink/HdmiCecSink.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,9 @@ namespace WPEFramework {
668668
/* Send Key event related */
669669
bool m_sendKeyEventThreadExit;
670670
bool m_sendKeyEventThreadRun;
671+
bool m_isAudioStatusInfoUpdated;
672+
bool m_audioStatusReceived;
673+
bool m_audioStatusTimerStarted;
671674
std::thread m_sendKeyEventThread;
672675
std::mutex m_sendKeyEventMutex;
673676
std::queue<SendKeyInfo> m_SendKeyQueue;
@@ -686,6 +689,7 @@ namespace WPEFramework {
686689
binary_semaphore m_semSignaltoArcRoutingThread;
687690
bool m_arcstarting;
688691
TpTimer m_arcStartStopTimer;
692+
TpTimer m_audioStatusDetectionTimer;
689693

690694
Connection *smConnection;
691695
std::vector<uint8_t> m_connectedDevices;
@@ -732,6 +736,7 @@ namespace WPEFramework {
732736
void Send_Request_Arc_Termination_Message();
733737
void Send_Report_Arc_Terminated_Message();
734738
void arcStartStopTimerFunction();
739+
void audioStatusTimerFunction();
735740
void getCecVersion();
736741
};
737742
} // namespace Plugin

0 commit comments

Comments
 (0)