Skip to content

Commit 1f819bb

Browse files
committed
Add IHdmiSystemAudioModeChangeListner to TvInputHardwareManager.
This is to update audio patch when HDMI-CEC system audio mode is changed. Bug: 16113320 Change-Id: I312fffe511c0bce1c973bb66e9c16875e5dcee56
1 parent 61daf6b commit 1f819bb

1 file changed

Lines changed: 26 additions & 1 deletion

File tree

services/core/java/com/android/server/tv/TvInputHardwareManager.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import android.hardware.hdmi.IHdmiDeviceEventListener;
2929
import android.hardware.hdmi.IHdmiHotplugEventListener;
3030
import android.hardware.hdmi.IHdmiInputChangeListener;
31+
import android.hardware.hdmi.IHdmiSystemAudioModeChangeListener;
3132
import android.media.AudioDevicePort;
3233
import android.media.AudioFormat;
3334
import android.media.AudioGain;
@@ -93,6 +94,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
9394
new HdmiHotplugEventListener();
9495
private final IHdmiDeviceEventListener mHdmiDeviceEventListener = new HdmiDeviceEventListener();
9596
private final IHdmiInputChangeListener mHdmiInputChangeListener = new HdmiInputChangeListener();
97+
private final IHdmiSystemAudioModeChangeListener mHdmiSystemAudioModeChangeListener =
98+
new HdmiSystemAudioModeChangeListener();
9699
// TODO: Should handle STANDBY case.
97100
private final SparseBooleanArray mHdmiStateMap = new SparseBooleanArray();
98101
private final List<Message> mPendingHdmiDeviceEvents = new LinkedList<>();
@@ -117,6 +120,8 @@ public void onBootPhase(int phase) {
117120
try {
118121
mHdmiControlService.addHotplugEventListener(mHdmiHotplugEventListener);
119122
mHdmiControlService.addDeviceEventListener(mHdmiDeviceEventListener);
123+
mHdmiControlService.addSystemAudioModeChangeListener(
124+
mHdmiSystemAudioModeChangeListener);
120125
mHdmiDeviceList.addAll(mHdmiControlService.getInputDevices());
121126
mHdmiControlService.setInputChangeListener(mHdmiInputChangeListener);
122127
} catch (RemoteException e) {
@@ -615,7 +620,7 @@ private AudioDevicePort findAudioSinkFromAudioPolicy() {
615620
int sinkDevice = mAudioManager.getDevicesForStream(AudioManager.STREAM_MUSIC);
616621
for (AudioPort port : devicePorts) {
617622
AudioDevicePort devicePort = (AudioDevicePort) port;
618-
if (devicePort.type() == sinkDevice) {
623+
if ((devicePort.type() & sinkDevice) != 0) {
619624
return devicePort;
620625
}
621626
}
@@ -838,6 +843,13 @@ private void updateAudioSinkLocked() {
838843
}
839844
}
840845

846+
private void handleAudioSinkUpdated() {
847+
synchronized (mImplLock) {
848+
updateAudioSinkLocked();
849+
updateAudioPatchLocked();
850+
}
851+
}
852+
841853
@Override
842854
public void overrideAudioSink(int audioType, String audioAddress, int samplingRate,
843855
int channelMask, int format) {
@@ -1006,4 +1018,17 @@ public void onChanged(HdmiDeviceInfo device) throws RemoteException {
10061018
}
10071019
}
10081020
}
1021+
1022+
private final class HdmiSystemAudioModeChangeListener extends
1023+
IHdmiSystemAudioModeChangeListener.Stub {
1024+
@Override
1025+
public void onStatusChanged(boolean enabled) throws RemoteException {
1026+
synchronized (mLock) {
1027+
for (int i = 0; i < mConnections.size(); ++i) {
1028+
TvInputHardwareImpl impl = mConnections.valueAt(i).getHardwareImplLocked();
1029+
impl.handleAudioSinkUpdated();
1030+
}
1031+
}
1032+
}
1033+
}
10091034
}

0 commit comments

Comments
 (0)