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

Commit 638dde04 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "audio hal: report index channel masks for USB"

parents 887985f5 68a8711e
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -1846,14 +1846,31 @@ static inline int read_usb_sup_channel_masks(bool is_playback,
    channel_count = DEFAULT_CHANNEL_COUNT;

    if (is_playback) {
        // For playback we never report mono because the framework always outputs stereo
        // audio_channel_out_mask_from_count() does return positional masks for channel counts
        // above 2 but we want indexed masks here.
        supported_channel_masks[num_masks++] = audio_channel_out_mask_from_count(channel_count);
        // start from 2 channels as framework currently doesn't support mono.
        if (channels >= FCC_2) {
            supported_channel_masks[num_masks++] = audio_channel_out_mask_from_count(FCC_2);
        }
        for (channel_count = FCC_2;
                channel_count <= channels && num_masks < max_masks;
                ++channel_count) {
            supported_channel_masks[num_masks++] =
                    audio_channel_mask_for_index_assignment_from_count(channel_count);
        }
    } else {
        // audio_channel_in_mask_from_count() does the right conversion to either positional or
        // indexed mask
        supported_channel_masks[num_masks++] = audio_channel_in_mask_from_count(channel_count);
        for ( ; channel_count <= channels && num_masks < max_masks; channel_count++) {
            audio_channel_mask_t mask = AUDIO_CHANNEL_NONE;
            if (channel_count <= FCC_2) {
                mask = audio_channel_in_mask_from_count(channel_count);
                supported_channel_masks[num_masks++] = mask;
            }
            const audio_channel_mask_t index_mask =
                    audio_channel_mask_for_index_assignment_from_count(channel_count);
            if (mask != index_mask && num_masks < max_masks) { // ensure index mask added.
                supported_channel_masks[num_masks++] = index_mask;
            }
        }
    }

    for (channel_count = channels; ((channel_count >= DEFAULT_CHANNEL_COUNT) &&