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

Commit 3115960b authored by Paul McLean's avatar Paul McLean
Browse files

Consider channel index masks when calculating channel counts.

Bug: 22874806
Change-Id: I04b74f5939bb81350d9e37b9629f8bbc242bffe7
parent 845d14db
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package android.media;
import android.annotation.NonNull;
import android.util.SparseIntArray;

import java.util.TreeSet;

/**
 * Class to provide information about the audio devices.
 */
@@ -185,13 +187,24 @@ public final class AudioDeviceInfo {
     * can be configured.
     */
    public @NonNull int[] getChannelCounts() {
        int[] masks = getChannelMasks();
        int[] counts = new int[masks.length];
        // TODO: consider channel index masks
        for (int mask_index = 0; mask_index < masks.length; mask_index++) {
            counts[mask_index] = isSink()
                    ? AudioFormat.channelCountFromOutChannelMask(masks[mask_index])
                    : AudioFormat.channelCountFromInChannelMask(masks[mask_index]);
        TreeSet<Integer> countSet = new TreeSet<Integer>();

        // Channel Masks
        for (int mask : getChannelMasks()) {
            countSet.add(isSink() ?
                    AudioFormat.channelCountFromOutChannelMask(mask)
                    : AudioFormat.channelCountFromInChannelMask(mask));
        }

        // Index Masks
        for (int index_mask : getChannelIndexMasks()) {
            countSet.add(Integer.bitCount(index_mask));
        }

        int[] counts = new int[countSet.size()];
        int index = 0;
        for (int count : countSet) {
            counts[index++] = count; 
        }
        return counts;
    }