153a5a1b3Sopenharmony_ci/*
253a5a1b3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
353a5a1b3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
453a5a1b3Sopenharmony_ci * you may not use this file except in compliance with the License.
553a5a1b3Sopenharmony_ci * You may obtain a copy of the License at
653a5a1b3Sopenharmony_ci *
753a5a1b3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
853a5a1b3Sopenharmony_ci *
953a5a1b3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1053a5a1b3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1153a5a1b3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1253a5a1b3Sopenharmony_ci * See the License for the specific language governing permissions and
1353a5a1b3Sopenharmony_ci * limitations under the License.
1453a5a1b3Sopenharmony_ci */
1553a5a1b3Sopenharmony_ci#include "downmix.h"
1653a5a1b3Sopenharmony_ci
1753a5a1b3Sopenharmony_ci/* coefficient matrix for downmixing */
1853a5a1b3Sopenharmony_ci/* usage: [output_channel_layout][input_channel][output_channel*/
1953a5a1b3Sopenharmony_ciconst uint16_t channelDownmixMatrix[PA_CHANNEL_LAYOUT_COUNT][PA_DOWNMIX_CHANNEL_MAX][PA_DOWNMIX_CHANNEL_MAX] = {
2053a5a1b3Sopenharmony_ci    /* Downmix matrix for STEREO output */
2153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
2253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
2353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 7071,
2453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 7071,
2553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 7071,
2653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 7071,
2753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5000,
2853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 5000,
2953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 7071,
3053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 7071,
3153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 6057,
3253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 2509,
3353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 2509,
3453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 6057,
3553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 3552,
3653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 3552,
3753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
3853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
3953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 7071,
4053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 7071,
4153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 7071,
4253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 7071,
4353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 3544,
4453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_STEREO][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 3544,
4553a5a1b3Sopenharmony_ci
4653a5a1b3Sopenharmony_ci    /* Downmix matrix for 5POINT1 */
4753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
4853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
4953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
5053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_LFE][PA_CHANNEL_POSITION_LFE] = 10000,
5153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
5253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
5353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
5453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
5553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5946,
5653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 7071,
5753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 5946,
5853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 7071,
5953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_LEFT] = 7071,
6053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_RIGHT] = 7071,
6153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_SIDE_LEFT] = 5000,
6253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_SIDE_RIGHT] = 5000,
6353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 5000,
6453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
6553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
6653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
6753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
6853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_CHANNEL_POSITION_SIDE_RIGHT] = 10000,
6953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_LEFT] = 7071,
7053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_RIGHT] = 7071,
7153a5a1b3Sopenharmony_ci
7253a5a1b3Sopenharmony_ci    /* Downmix table for 5POINT1POINT2 */
7353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
7453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
7553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
7653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_LFE][PA_CHANNEL_POSITION_LFE] = 10000,
7753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
7853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
7953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
8053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
8153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5946,
8253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
8353a5a1b3Sopenharmony_ci        7071,
8453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] =
8553a5a1b3Sopenharmony_ci        5946,
8653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
8753a5a1b3Sopenharmony_ci        7071,
8853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_LEFT] = 7071,
8953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_RIGHT] = 7071,
9053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 7071,
9153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 7071,
9253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
9353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
9453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
9553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 10000,
9653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 10000,
9753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_REAR_LEFT] = 7071,
9853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_REAR_RIGHT] = 7071,
9953a5a1b3Sopenharmony_ci
10053a5a1b3Sopenharmony_ci    /* Downmix table for 5POINT1POINT4 */
10153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
10253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
10353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
10453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_LFE][PA_CHANNEL_POSITION_LFE] = 10000,
10553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
10653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
10753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
10853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
10953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5946,
11053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
11153a5a1b3Sopenharmony_ci        7071,
11253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] =
11353a5a1b3Sopenharmony_ci        5946,
11453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
11553a5a1b3Sopenharmony_ci        7071,
11653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_LEFT] = 7071,
11753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_SIDE_RIGHT] = 7071,
11853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT] = 5000,
11953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT] = 5000,
12053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 5000,
12153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 5000,
12253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT] = 10000,
12353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT] = 10000,
12453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT] = 7071,
12553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT] = 7071,
12653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 10000,
12753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 10000,
12853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 7071,
12953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_5POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 7071,
13053a5a1b3Sopenharmony_ci
13153a5a1b3Sopenharmony_ci    /* Downmix table for 7POINT1 */
13253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
13353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
13453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
13553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_LFE][PA_CHANNEL_POSITION_LFE] = 10000,
13653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_REAR_LEFT] = 10000,
13753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_REAR_RIGHT] = 10000,
13853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_SIDE_RIGHT] = 10000,
13953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
14053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5946,
14153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 7071,
14253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] = 5946,
14353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 7071,
14453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_REAR_LEFT] = 7071,
14553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_REAR_RIGHT] = 7071,
14653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 5000,
14753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_SIDE_LEFT] = 5000,
14853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_CENTER][PA_CHANNEL_POSITION_SIDE_RIGHT] = 5000,
14953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
15053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
15153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
15253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_CHANNEL_POSITION_REAR_LEFT] = 10000,
15353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_CHANNEL_POSITION_REAR_RIGHT] = 10000,
15453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_REAR_LEFT] = 7071,
15553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_CHANNEL_POSITION_REAR_RIGHT] = 7071,
15653a5a1b3Sopenharmony_ci
15753a5a1b3Sopenharmony_ci    /* downmix table for 7POINT1POINT2 */
15853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
15953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
16053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
16153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_LFE][PA_CHANNEL_POSITION_LFE] = 10000,
16253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_REAR_LEFT] = 10000,
16353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_REAR_RIGHT] = 10000,
16453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_SIDE_RIGHT] = 10000,
16553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
16653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5946,
16753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
16853a5a1b3Sopenharmony_ci        7071,
16953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] =
17053a5a1b3Sopenharmony_ci        5946,
17153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
17253a5a1b3Sopenharmony_ci        7071,
17353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_REAR_LEFT] = 7071,
17453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_REAR_RIGHT] = 7071,
17553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 7071,
17653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 7071,
17753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
17853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
17953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
18053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 10000,
18153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 10000,
18253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 7071,
18353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT2][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 7071,
18453a5a1b3Sopenharmony_ci
18553a5a1b3Sopenharmony_ci    /* downmix table for 7POINT1POINT4*/
18653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_LEFT][PA_CHANNEL_POSITION_FRONT_LEFT] = 10000,
18753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_RIGHT][PA_CHANNEL_POSITION_FRONT_RIGHT] = 10000,
18853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] = 10000,
18953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_LFE][PA_CHANNEL_POSITION_LFE] = 10000,
19053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_REAR_LEFT][PA_CHANNEL_POSITION_REAR_LEFT] = 10000,
19153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_REAR_RIGHT][PA_CHANNEL_POSITION_REAR_RIGHT] = 10000,
19253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_SIDE_RIGHT][PA_CHANNEL_POSITION_SIDE_RIGHT] = 10000,
19353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_SIDE_LEFT][PA_CHANNEL_POSITION_SIDE_LEFT] = 10000,
19453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_LEFT] = 5946,
19553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
19653a5a1b3Sopenharmony_ci        7071,
19753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_RIGHT] =
19853a5a1b3Sopenharmony_ci        5946,
19953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER][PA_CHANNEL_POSITION_FRONT_CENTER] =
20053a5a1b3Sopenharmony_ci        7071,
20153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_REAR_LEFT] = 7071,
20253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_CHANNEL_POSITION_REAR_CENTER][PA_CHANNEL_POSITION_REAR_RIGHT] = 7071,
20353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT] = 5000,
20453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT] = 5000,
20553a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 5000,
20653a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 5000,
20753a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT] = 10000,
20853a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT] = 10000,
20953a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_LEFT] = 7071,
21053a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_FRONT_CENTER][PA_DOWNMIX_POSITION_TOP_FRONT_RIGHT] = 7071,
21153a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_LEFT][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 10000,
21253a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 10000,
21353a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_LEFT] = 7071,
21453a5a1b3Sopenharmony_ci    [PA_CHANNEL_LAYOUT_7POINT1POINT4][PA_DOWNMIX_POSITION_TOP_REAR_CENTER][PA_DOWNMIX_POSITION_TOP_REAR_RIGHT] = 7071,
21553a5a1b3Sopenharmony_ci};
21653a5a1b3Sopenharmony_ci
21753a5a1b3Sopenharmony_cipa_channel_layout_index_t pa_channel_map_to_index(const pa_channel_map *map)
21853a5a1b3Sopenharmony_ci{
21953a5a1b3Sopenharmony_ci    pa_bitset_t in_map[PA_BITSET_ELEMENTS(PA_CHANNEL_POSITION_MAX)];
22053a5a1b3Sopenharmony_ci    unsigned c;
22153a5a1b3Sopenharmony_ci
22253a5a1b3Sopenharmony_ci    pa_assert(map);
22353a5a1b3Sopenharmony_ci
22453a5a1b3Sopenharmony_ci    pa_return_val_if_fail(pa_channel_map_valid(map), PA_CHANNEL_LAYOUT_OTHER);
22553a5a1b3Sopenharmony_ci
22653a5a1b3Sopenharmony_ci    memset(in_map, 0, sizeof(in_map));
22753a5a1b3Sopenharmony_ci
22853a5a1b3Sopenharmony_ci    for (c = 0; c < map->channels; c++) { pa_bitset_set(in_map, map->map[c], true); }
22953a5a1b3Sopenharmony_ci
23053a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT, -1)) {
23153a5a1b3Sopenharmony_ci        return PA_CHANNEL_LAYOUT_STEREO;
23253a5a1b3Sopenharmony_ci    }
23353a5a1b3Sopenharmony_ci
23453a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_FRONT_LEFT,
23553a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT,
23653a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_CENTER, PA_CHANNEL_POSITION_LFE, -1)) { return PA_CHANNEL_LAYOUT_5POINT1; }
23753a5a1b3Sopenharmony_ci
23853a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_FRONT_LEFT,
23953a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT,
24053a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_CENTER, PA_CHANNEL_POSITION_LFE, PA_CHANNEL_POSITION_TOP_REAR_LEFT,
24153a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_TOP_REAR_RIGHT, -1)) { return PA_CHANNEL_LAYOUT_5POINT1POINT2; }
24253a5a1b3Sopenharmony_ci
24353a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_FRONT_LEFT,
24453a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT,
24553a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_CENTER, PA_CHANNEL_POSITION_LFE, PA_CHANNEL_POSITION_TOP_REAR_LEFT,
24653a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_TOP_REAR_RIGHT, PA_CHANNEL_POSITION_TOP_FRONT_LEFT,
24753a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_TOP_FRONT_RIGHT, -1)) { return PA_CHANNEL_LAYOUT_5POINT1POINT4; }
24853a5a1b3Sopenharmony_ci
24953a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_FRONT_LEFT,
25053a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT,
25153a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_FRONT_CENTER,
25253a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_LFE, -1)) { return PA_CHANNEL_LAYOUT_7POINT1; }
25353a5a1b3Sopenharmony_ci
25453a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_FRONT_LEFT,
25553a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT,
25653a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_FRONT_CENTER,
25753a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_LFE, PA_CHANNEL_POSITION_TOP_REAR_LEFT,  PA_CHANNEL_POSITION_TOP_REAR_RIGHT, -1)) {
25853a5a1b3Sopenharmony_ci        return PA_CHANNEL_LAYOUT_7POINT1POINT2;
25953a5a1b3Sopenharmony_ci    }
26053a5a1b3Sopenharmony_ci    if (pa_bitset_equals(in_map, PA_CHANNEL_POSITION_MAX, PA_CHANNEL_POSITION_FRONT_LEFT,
26153a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT,
26253a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_FRONT_CENTER,
26353a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_LFE, PA_CHANNEL_POSITION_TOP_REAR_LEFT,  PA_CHANNEL_POSITION_TOP_REAR_RIGHT,
26453a5a1b3Sopenharmony_ci        PA_CHANNEL_POSITION_TOP_FRONT_LEFT, PA_CHANNEL_POSITION_TOP_FRONT_RIGHT, -1)) {
26553a5a1b3Sopenharmony_ci        return PA_CHANNEL_LAYOUT_7POINT1POINT4;
26653a5a1b3Sopenharmony_ci    }
26753a5a1b3Sopenharmony_ci    return PA_CHANNEL_LAYOUT_OTHER;
26853a5a1b3Sopenharmony_ci}
26953a5a1b3Sopenharmony_ci
27053a5a1b3Sopenharmony_ciint pa_to_downmix_position(const pa_channel_position_t channel_position)
27153a5a1b3Sopenharmony_ci{
27253a5a1b3Sopenharmony_ci    if (channel_position < PA_CHANNEL_POSITION_AUX0) {
27353a5a1b3Sopenharmony_ci        return channel_position;
27453a5a1b3Sopenharmony_ci    } else if (channel_position > PA_CHANNEL_POSITION_AUX31) { /* skip AUX0 - AUX31 */
27553a5a1b3Sopenharmony_ci        return channel_position - SKIPPED_CHANNEL_COUNT;
27653a5a1b3Sopenharmony_ci    } else {
27753a5a1b3Sopenharmony_ci    /* AUX0 - AUX31, which are not in use now */
27853a5a1b3Sopenharmony_ci    /* do nothing to map table */
27953a5a1b3Sopenharmony_ci        return 0;
28053a5a1b3Sopenharmony_ci    }
28153a5a1b3Sopenharmony_ci}