Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1fa0d0f authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

AudioMix: Always produce output channel masks from Builder

Ensure that AudioMix.Builder always produces and AudioMix
which uses an output channel mask. There are assumptions
in the framework that this is the case, however clients
can actually pass an input mask.

Bug: 194910301
Test: gts-tradefed run gts -m GtsGmscoreHostTestCases \
      -t com.google.android.gts.audio.AudioHostTest
Change-Id: I698eef509a0e3427b7cfc4bf8b045379416f7964
parent de7585fe
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -420,6 +420,20 @@ public class AudioMix {
                    rate = 44100;
                }
                mFormat = new AudioFormat.Builder().setSampleRate(rate).build();
            } else {
                // Ensure that 'mFormat' uses an output channel mask. Using an input channel
                // mask was not made 'illegal' initially, however the framework code
                // assumes usage in AudioMixes of output channel masks only (b/194910301).
                if ((mFormat.getPropertySetMask()
                                & AudioFormat.AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_MASK) != 0) {
                    if (mFormat.getChannelCount() == 1
                            && mFormat.getChannelMask() == AudioFormat.CHANNEL_IN_MONO) {
                        mFormat = new AudioFormat.Builder(mFormat).setChannelMask(
                                AudioFormat.CHANNEL_OUT_MONO).build();
                    }
                    // CHANNEL_IN_STEREO == CHANNEL_OUT_STEREO so no need to correct.
                    // CHANNEL_IN_FRONT_BACK is hidden, should not appear.
                }
            }
            if ((mDeviceSystemType != AudioSystem.DEVICE_NONE)
                    && (mDeviceSystemType != AudioSystem.DEVICE_OUT_REMOTE_SUBMIX)