diff options
| author | 2014-09-15 17:41:06 +0900 | |
|---|---|---|
| committer | 2014-09-16 10:12:41 +0900 | |
| commit | c9ff968787d4744194f9985ebaf8ce7efdd12256 (patch) | |
| tree | a00bd9414570ed1f5cfc07f4f4a58a462bfe2889 | |
| parent | 84f20ec49df3bfc8b40a27964ba2b074e5f101fc (diff) | |
Fix volume change failure in HDMI-CEC system audio mode.
In order to get volume change event, output device should not be
in fixed volume device. This change ignores CEC releated outputs
if system audio mode is on.
Along with this, fix invalid output from getStreamForDevice
as AudioPolicManager does.
Bug: 17502272
Change-Id: I7d4406caea7fa6617f17969dc61aabebb87ecf7d
| -rw-r--r-- | media/java/android/media/AudioService.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 86c4d028974b..40d45ea67a15 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -666,6 +666,9 @@ public class AudioService extends IAudioService.Stub { if (mHdmiManager != null) { synchronized (mHdmiManager) { mHdmiTvClient = mHdmiManager.getTvClient(); + if (mHdmiTvClient != null) { + mFixedVolumeDevices &= ~AudioSystem.DEVICE_ALL_HDMI_SYSTEM_AUDIO_AND_SPEAKER; + } mHdmiPlaybackClient = mHdmiManager.getPlaybackClient(); mHdmiCecSink = false; } @@ -3089,8 +3092,15 @@ public class AudioService extends IAudioService.Stub { // - one A2DP device + another device: happens with duplicated output. In this case // retain the device on the A2DP output as the other must not correspond to an active // selection if not the speaker. + // - HDMI-CEC system audio mode only output: give priority to available item in order. if ((device & AudioSystem.DEVICE_OUT_SPEAKER) != 0) { device = AudioSystem.DEVICE_OUT_SPEAKER; + } else if ((device & AudioSystem.DEVICE_OUT_HDMI_ARC) != 0) { + device = AudioSystem.DEVICE_OUT_HDMI_ARC; + } else if ((device & AudioSystem.DEVICE_OUT_SPDIF) != 0) { + device = AudioSystem.DEVICE_OUT_SPDIF; + } else if ((device & AudioSystem.DEVICE_OUT_AUX_LINE) != 0) { + device = AudioSystem.DEVICE_OUT_AUX_LINE; } else { device &= AudioSystem.DEVICE_OUT_ALL_A2DP; } |