OSDN Git Service

CEC: Buffer <Set System Audio Mode>
authorJinsuk Kim <jinsukkim@google.com>
Fri, 2 Jan 2015 04:27:15 +0000 (13:27 +0900)
committerJinsuk Kim <jinsukkim@google.com>
Fri, 2 Jan 2015 07:08:56 +0000 (16:08 +0900)
<Set System Audio Mode> is another command that needs to be buffered
in case the command arrives before the system is ready to process it.
When processed, system audio mode will be enabled based on the
global setting.

Bug: 18809965

Change-Id: Ia6ebc4e2919e1b94498ca28f652c6db95f907f9c

services/core/java/com/android/server/hdmi/DelayedMessageBuffer.java
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java

index 68311de..922a2c1 100644 (file)
@@ -54,6 +54,7 @@ final class DelayedMessageBuffer {
                 mBuffer.add(message);
                 break;
             case Constants.MESSAGE_INITIATE_ARC:
+            case Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE:
                 mBuffer.add(message);
                 break;
             default:
index f40010d..ed7cebb 100644 (file)
@@ -742,7 +742,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
     @ServiceThreadOnly
     void onNewAvrAdded(HdmiDeviceInfo avr) {
         assertRunOnServiceThread();
-        if (getSystemAudioModeSetting()) {
+        if (getSystemAudioModeSetting() && !isSystemAudioActivated()) {
             addAndStartAction(new SystemAudioAutoInitiationAction(this, avr.getLogicalAddress()));
         }
         if (isArcFeatureEnabled() && !hasAction(SetArcTransmissionStateAction.class)) {
@@ -1037,6 +1037,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
     protected boolean handleSetSystemAudioMode(HdmiCecMessage message) {
         assertRunOnServiceThread();
         if (!isMessageForSystemAudio(message)) {
+            if (getAvrDeviceInfo() == null) {
+                // AVR may not have been discovered yet. Delay the message processing.
+                mDelayedMessageBuffer.add(message);
+                return true;
+            }
             HdmiLogger.warning("Invalid <Set System Audio Mode> message:" + message);
             mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
             return true;