From ad1e3d7df42376cd2a257b6c3b2fed540658a6e3 Mon Sep 17 00:00:00 2001 From: Jinsuk Kim Date: Fri, 2 Jan 2015 13:27:15 +0900 Subject: [PATCH] CEC: Buffer 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 --- .../java/com/android/server/hdmi/DelayedMessageBuffer.java | 1 + .../java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/hdmi/DelayedMessageBuffer.java b/services/core/java/com/android/server/hdmi/DelayedMessageBuffer.java index 68311defd3eb0..922a2c14c4cce 100644 --- a/services/core/java/com/android/server/hdmi/DelayedMessageBuffer.java +++ b/services/core/java/com/android/server/hdmi/DelayedMessageBuffer.java @@ -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: diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index f40010da3d94f..ed7cebbc1b031 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -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 message:" + message); mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED); return true;