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

Commit af7748ef authored by Paul Mclean's avatar Paul Mclean Committed by Android (Google) Code Review
Browse files

Merge "Consider channel index masks when calculating channel counts." into mnc-dev

parents c770b7a5 3115960b
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.
 */
@@ -201,13 +203,24 @@ public final class AudioDeviceInfo {
     * Note: an empty array indicates that the device supports arbitrary channel counts.
     */
    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;
    }