This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 7a205ebf3a6a1ea14a7fb1d3fa07ccae5fd297dd
Author:     Andreas Rheinhardt <[email protected]>
AuthorDate: Fri Aug 7 12:10:01 2026 +0200
Commit:     Andreas Rheinhardt <[email protected]>
CommitDate: Wed Aug 12 00:09:05 2026 +0200

    swresample/rematrix: Avoid repeated calls to av_channel_layout* funcs
    
    Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libswresample/rematrix.c | 177 +++++++++++++++++++++++------------------------
 1 file changed, 88 insertions(+), 89 deletions(-)

diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c
index 5e9f536814..67d9b48339 100644
--- a/libswresample/rematrix.c
+++ b/libswresample/rematrix.c
@@ -121,23 +121,24 @@ static int sane_layout(AVChannelLayout *ch_layout) {
         }
     else if (ch_layout->order != AV_CHANNEL_ORDER_NATIVE)
         return 0;
-    if(!av_channel_layout_subset(ch_layout, AV_CH_LAYOUT_SURROUND)) // at 
least 1 front speaker
+    uint64_t mask = av_channel_layout_subset(ch_layout, ~(uint64_t)0);
+    if(!(mask & AV_CH_LAYOUT_SURROUND)) // at least 1 front speaker
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_FRONT_LEFT | 
AV_CH_FRONT_RIGHT)))) // no asymmetric front
+    if (!even(mask & (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT))) // no asymmetric 
front
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_SIDE_LEFT | 
AV_CH_SIDE_RIGHT))))   // no asymmetric side
+    if (!even(mask & (AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT)))   // no asymmetric 
side
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_BACK_LEFT | 
AV_CH_BACK_RIGHT))))
+    if (!even(mask & (AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT)))
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_FRONT_LEFT_OF_CENTER | 
AV_CH_FRONT_RIGHT_OF_CENTER))))
+    if (!even(mask & (AV_CH_FRONT_LEFT_OF_CENTER | 
AV_CH_FRONT_RIGHT_OF_CENTER)))
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_TOP_FRONT_LEFT | 
AV_CH_TOP_FRONT_RIGHT))))
+    if (!even(mask & (AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT)))
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_TOP_BACK_LEFT | 
AV_CH_TOP_BACK_RIGHT))))
+    if (!even(mask & (AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT)))
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_TOP_SIDE_LEFT | 
AV_CH_TOP_SIDE_RIGHT))))
+    if (!even(mask & (AV_CH_TOP_SIDE_LEFT | AV_CH_TOP_SIDE_RIGHT)))
         return 0;
-    if(!even(av_channel_layout_subset(ch_layout, (AV_CH_BOTTOM_FRONT_LEFT | 
AV_CH_BOTTOM_FRONT_RIGHT))))
+    if (!even(mask & (AV_CH_BOTTOM_FRONT_LEFT | AV_CH_BOTTOM_FRONT_RIGHT)))
         return 0;
 
     return 1;
@@ -149,14 +150,14 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
                          ptrdiff_t stride, enum AVMatrixEncoding 
matrix_encoding)
 {
     double matrix[NUM_NAMED_CHANNELS][NUM_NAMED_CHANNELS]={{0}};
-    uint64_t unaccounted =  av_channel_layout_subset(in_ch_layout,  
UINT64_MAX) &
-                           ~av_channel_layout_subset(out_ch_layout, 
UINT64_MAX);
+    uint64_t in_mask  = av_channel_layout_subset(in_ch_layout,  ~(uint64_t)0);
+    uint64_t out_mask = av_channel_layout_subset(out_ch_layout, ~(uint64_t)0);
+    uint64_t unaccounted =  in_mask & ~out_mask;
     double maxcoef=0;
     int i, j;
 
     for(i=0; i<FF_ARRAY_ELEMS(matrix); i++){
-        if(   av_channel_layout_index_from_channel(in_ch_layout, i) >= 0
-           && av_channel_layout_index_from_channel(out_ch_layout, i) >= 0)
+        if (in_mask & out_mask & (1ULL << i))
             matrix[i][i]= 1.0;
     }
 
@@ -164,8 +165,8 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
 //FIXME implement full ac3
 
     if(unaccounted & AV_CH_FRONT_CENTER){
-        if (av_channel_layout_subset(out_ch_layout, AV_CH_LAYOUT_STEREO) == 
AV_CH_LAYOUT_STEREO) {
-            if (av_channel_layout_subset(in_ch_layout, AV_CH_LAYOUT_STEREO)) {
+        if ((out_mask & AV_CH_LAYOUT_STEREO) == AV_CH_LAYOUT_STEREO) {
+            if (in_mask & AV_CH_LAYOUT_STEREO) {
                 matrix[ FRONT_LEFT][FRONT_CENTER]+= center_mix_level;
                 matrix[FRONT_RIGHT][FRONT_CENTER]+= center_mix_level;
             } else {
@@ -176,23 +177,23 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
             av_assert0(0);
     }
     if(unaccounted & AV_CH_LAYOUT_STEREO){
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][ FRONT_LEFT]+= M_SQRT1_2;
             matrix[FRONT_CENTER][FRONT_RIGHT]+= M_SQRT1_2;
-            if (av_channel_layout_index_from_channel(in_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0)
+            if (in_mask & AV_CH_FRONT_CENTER)
                 matrix[FRONT_CENTER][ FRONT_CENTER] = center_mix_level*sqrt(2);
         }else
             av_assert0(0);
     }
 
     if(unaccounted & AV_CH_BACK_CENTER){
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+        if (out_mask & AV_CH_BACK_LEFT) {
             matrix[ BACK_LEFT][BACK_CENTER]+= M_SQRT1_2;
             matrix[BACK_RIGHT][BACK_CENTER]+= M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_SIDE_LEFT) {
             matrix[ SIDE_LEFT][BACK_CENTER]+= M_SQRT1_2;
             matrix[SIDE_RIGHT][BACK_CENTER]+= M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             if (matrix_encoding == AV_MATRIX_ENCODING_DOLBY ||
                 matrix_encoding == AV_MATRIX_ENCODING_DPLII) {
                 if (unaccounted & (AV_CH_BACK_LEFT | AV_CH_SIDE_LEFT)) {
@@ -206,24 +207,24 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
                 matrix[ FRONT_LEFT][BACK_CENTER]+= surround_mix_level * 
M_SQRT1_2;
                 matrix[FRONT_RIGHT][BACK_CENTER]+= surround_mix_level * 
M_SQRT1_2;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[ FRONT_CENTER][BACK_CENTER]+= surround_mix_level * 
M_SQRT1_2;
         }else
             av_assert0(0);
     }
     if(unaccounted & AV_CH_BACK_LEFT){
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_CENTER) >= 0) {
+        if (out_mask & AV_CH_BACK_CENTER) {
             matrix[BACK_CENTER][ BACK_LEFT]+= M_SQRT1_2;
             matrix[BACK_CENTER][BACK_RIGHT]+= M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
-            if (av_channel_layout_index_from_channel(in_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_SIDE_LEFT) {
+            if (in_mask & AV_CH_SIDE_LEFT) {
                 matrix[ SIDE_LEFT][ BACK_LEFT]+= M_SQRT1_2;
                 matrix[SIDE_RIGHT][BACK_RIGHT]+= M_SQRT1_2;
             }else{
             matrix[ SIDE_LEFT][ BACK_LEFT]+= 1.0;
             matrix[SIDE_RIGHT][BACK_RIGHT]+= 1.0;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             if (matrix_encoding == AV_MATRIX_ENCODING_DOLBY) {
                 matrix[FRONT_LEFT ][BACK_LEFT ] -= surround_mix_level * 
M_SQRT1_2;
                 matrix[FRONT_LEFT ][BACK_RIGHT] -= surround_mix_level * 
M_SQRT1_2;
@@ -238,7 +239,7 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
                 matrix[ FRONT_LEFT][ BACK_LEFT] += surround_mix_level;
                 matrix[FRONT_RIGHT][BACK_RIGHT] += surround_mix_level;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[ FRONT_CENTER][BACK_LEFT ]+= surround_mix_level*M_SQRT1_2;
             matrix[ FRONT_CENTER][BACK_RIGHT]+= surround_mix_level*M_SQRT1_2;
         }else
@@ -246,20 +247,20 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if(unaccounted & AV_CH_SIDE_LEFT){
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+        if (out_mask & AV_CH_BACK_LEFT) {
             /* if back channels do not exist in the input, just copy side
                channels to back channels, otherwise mix side into back */
-            if (av_channel_layout_index_from_channel(in_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+            if (in_mask & AV_CH_BACK_LEFT) {
                 matrix[BACK_LEFT ][SIDE_LEFT ] += M_SQRT1_2;
                 matrix[BACK_RIGHT][SIDE_RIGHT] += M_SQRT1_2;
             } else {
                 matrix[BACK_LEFT ][SIDE_LEFT ] += 1.0;
                 matrix[BACK_RIGHT][SIDE_RIGHT] += 1.0;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_BACK_CENTER) {
             matrix[BACK_CENTER][ SIDE_LEFT]+= M_SQRT1_2;
             matrix[BACK_CENTER][SIDE_RIGHT]+= M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             if (matrix_encoding == AV_MATRIX_ENCODING_DOLBY) {
                 matrix[FRONT_LEFT ][SIDE_LEFT ] -= surround_mix_level * 
M_SQRT1_2;
                 matrix[FRONT_LEFT ][SIDE_RIGHT] -= surround_mix_level * 
M_SQRT1_2;
@@ -274,7 +275,7 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
                 matrix[ FRONT_LEFT][ SIDE_LEFT] += surround_mix_level;
                 matrix[FRONT_RIGHT][SIDE_RIGHT] += surround_mix_level;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[ FRONT_CENTER][SIDE_LEFT ]+= surround_mix_level * M_SQRT1_2;
             matrix[ FRONT_CENTER][SIDE_RIGHT]+= surround_mix_level * M_SQRT1_2;
         }else
@@ -282,10 +283,10 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if(unaccounted & AV_CH_FRONT_LEFT_OF_CENTER){
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        if (out_mask & AV_CH_FRONT_LEFT) {
             matrix[ FRONT_LEFT][ FRONT_LEFT_OF_CENTER]+= 1.0;
             matrix[FRONT_RIGHT][FRONT_RIGHT_OF_CENTER]+= 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[ FRONT_CENTER][ FRONT_LEFT_OF_CENTER]+= M_SQRT1_2;
             matrix[ FRONT_CENTER][FRONT_RIGHT_OF_CENTER]+= M_SQRT1_2;
         }else
@@ -293,16 +294,16 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if (unaccounted & AV_CH_TOP_FRONT_LEFT) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_FRONT_CENTER) >= 0) {
+        if (out_mask & AV_CH_TOP_FRONT_CENTER) {
             matrix[TOP_FRONT_CENTER][TOP_FRONT_LEFT ] += M_SQRT1_2;
             matrix[TOP_FRONT_CENTER][TOP_FRONT_RIGHT] += M_SQRT1_2;
-            if (av_channel_layout_index_from_channel(in_ch_layout, 
AV_CHAN_TOP_FRONT_CENTER) >= 0)
+            if (in_mask & AV_CH_TOP_FRONT_CENTER)
                 matrix[TOP_FRONT_CENTER][TOP_FRONT_CENTER] = center_mix_level 
* sqrt(2);
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             /* U+030 -> M+030 in ITU-R BS.2127-1, Table 16. */
             matrix[FRONT_LEFT ][TOP_FRONT_LEFT ] += 1.0;
             matrix[FRONT_RIGHT][TOP_FRONT_RIGHT] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][TOP_FRONT_LEFT ] += M_SQRT1_2;
             matrix[FRONT_CENTER][TOP_FRONT_RIGHT] += M_SQRT1_2;
         } else
@@ -310,14 +311,14 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if (unaccounted & AV_CH_TOP_FRONT_CENTER) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_FRONT_LEFT) >= 0) {
+        if (out_mask & AV_CH_TOP_FRONT_LEFT) {
             /* U+030 = U-030 = sqrt(1/2) */
             matrix[TOP_FRONT_LEFT ][TOP_FRONT_CENTER]+= M_SQRT1_2;
             matrix[TOP_FRONT_RIGHT][TOP_FRONT_CENTER]+= M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             /* M+000 = 1 */
             matrix[FRONT_CENTER][TOP_FRONT_CENTER] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             /* M+030 = M-030 = sqrt(1/2) */
             matrix[FRONT_LEFT ][TOP_FRONT_CENTER] += center_mix_level;
             matrix[FRONT_RIGHT][TOP_FRONT_CENTER] += center_mix_level;
@@ -326,23 +327,23 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if (unaccounted & AV_CH_TOP_BACK_LEFT) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_BACK_CENTER) >= 0) {
+        if (out_mask & AV_CH_TOP_BACK_CENTER) {
             matrix[TOP_BACK_CENTER][TOP_BACK_LEFT ] += M_SQRT1_2;
             matrix[TOP_BACK_CENTER][TOP_BACK_RIGHT] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_TOP_FRONT_LEFT) {
             /* IAMF v1.1.0, Section 7.3.2.1.1. */
             matrix[TOP_FRONT_LEFT ][TOP_BACK_LEFT ] += M_SQRT1_2;
             matrix[TOP_FRONT_RIGHT][TOP_BACK_RIGHT] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_BACK_LEFT) {
             matrix[BACK_LEFT ][TOP_BACK_LEFT ] += 1.0;
             matrix[BACK_RIGHT][TOP_BACK_RIGHT] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_SIDE_LEFT) {
             matrix[SIDE_LEFT ][TOP_BACK_LEFT ] += 1.0;
             matrix[SIDE_RIGHT][TOP_BACK_RIGHT] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             matrix[FRONT_LEFT ][TOP_BACK_LEFT ] += surround_mix_level;
             matrix[FRONT_RIGHT][TOP_BACK_RIGHT] += surround_mix_level;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][TOP_BACK_LEFT ] += 
surround_mix_level*M_SQRT1_2;
             matrix[FRONT_CENTER][TOP_BACK_RIGHT] += 
surround_mix_level*M_SQRT1_2;
         } else
@@ -351,19 +352,19 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
 
     /* BS.2127-1 maps U+180 to rear outputs before front outputs. */
     if (unaccounted & AV_CH_TOP_BACK_CENTER) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_BACK_LEFT) >= 0) {
+        if (out_mask & AV_CH_TOP_BACK_LEFT) {
             matrix[TOP_BACK_LEFT ][TOP_BACK_CENTER] += M_SQRT1_2;
             matrix[TOP_BACK_RIGHT][TOP_BACK_CENTER] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_BACK_LEFT) {
             matrix[BACK_LEFT ][TOP_BACK_CENTER] += M_SQRT1_2;
             matrix[BACK_RIGHT][TOP_BACK_CENTER] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_SIDE_LEFT) {
             matrix[SIDE_LEFT ][TOP_BACK_CENTER] += M_SQRT1_2;
             matrix[SIDE_RIGHT][TOP_BACK_CENTER] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             matrix[FRONT_LEFT ][TOP_BACK_CENTER] += 0.5;
             matrix[FRONT_RIGHT][TOP_BACK_CENTER] += 0.5;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0)
+        } else if (out_mask & AV_CH_FRONT_CENTER)
             matrix[FRONT_CENTER][TOP_BACK_CENTER] += 0.5;
         else
             av_assert0(0);
@@ -371,45 +372,45 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
 
 
     if (unaccounted & AV_CH_TOP_SIDE_LEFT) {
-        if (av_channel_layout_subset(out_ch_layout, 
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) ==
-                                                    
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) {
+        if ((out_mask & (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) ==
+                        (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) {
             /* UH+180 = sqrt(1/3); U±045 = sqrt(2/3)*/
             matrix[TOP_FRONT_LEFT ][TOP_SIDE_LEFT ] += SQRT2_3;
             matrix[TOP_FRONT_RIGHT][TOP_SIDE_RIGHT] += SQRT2_3;
             matrix[TOP_BACK_CENTER][TOP_SIDE_LEFT ] += SQRT1_3;
             matrix[TOP_BACK_CENTER][TOP_SIDE_RIGHT] += SQRT1_3;
-        } else if (av_channel_layout_subset(out_ch_layout, 
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) ==
-                                                           
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) {
+        } else if ((out_mask & (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) ==
+                               (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) {
             /* U±030 = U±110 = sqrt(1/2) */
             matrix[TOP_FRONT_LEFT ][TOP_SIDE_LEFT ] += M_SQRT1_2;
             matrix[TOP_FRONT_RIGHT][TOP_SIDE_RIGHT] += M_SQRT1_2;
             matrix[TOP_BACK_LEFT ][TOP_SIDE_LEFT ] += M_SQRT1_2;
             matrix[TOP_BACK_RIGHT][TOP_SIDE_RIGHT] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_FRONT_LEFT) >= 0 &&
-                   av_channel_layout_subset(out_ch_layout, 
(AV_CH_BACK_LEFT|AV_CH_SIDE_LEFT))) {
+        } else if (out_mask & AV_CH_TOP_FRONT_LEFT &&
+                   (out_mask & (AV_CH_BACK_LEFT|AV_CH_SIDE_LEFT))) {
             /* U±030 = M±110 = sqrt(1/2) */
             matrix[TOP_FRONT_LEFT ][TOP_SIDE_LEFT] += M_SQRT1_2;
             matrix[TOP_FRONT_RIGHT][TOP_SIDE_RIGHT] += M_SQRT1_2;
-            if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+            if (out_mask & AV_CH_BACK_LEFT) {
                 matrix[BACK_LEFT ][TOP_SIDE_LEFT] += M_SQRT1_2;
                 matrix[BACK_RIGHT][TOP_SIDE_RIGHT] += M_SQRT1_2;
-            } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+            } else if (out_mask & AV_CH_SIDE_LEFT) {
                 matrix[SIDE_LEFT ][TOP_SIDE_LEFT] += M_SQRT1_2;
                 matrix[SIDE_RIGHT][TOP_SIDE_RIGHT] += M_SQRT1_2;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_SIDE_LEFT) {
             /* M±090 = 1 */
             matrix[SIDE_LEFT ][TOP_SIDE_LEFT ] += 1.0;
             matrix[SIDE_RIGHT][TOP_SIDE_RIGHT] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             /* M±030 = M±110 = sqrt(1/2) */
             matrix[FRONT_LEFT ][TOP_SIDE_LEFT ] += surround_mix_level;
             matrix[FRONT_RIGHT][TOP_SIDE_RIGHT] += surround_mix_level;
-            if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+            if (out_mask & AV_CH_BACK_LEFT) {
                 matrix[BACK_LEFT ][TOP_SIDE_LEFT ] += M_SQRT1_2;
                 matrix[BACK_RIGHT][TOP_SIDE_RIGHT] += M_SQRT1_2;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][TOP_SIDE_LEFT ] += 
surround_mix_level*M_SQRT1_2;
             matrix[FRONT_CENTER][TOP_SIDE_RIGHT] += 
surround_mix_level*M_SQRT1_2;
         } else
@@ -417,54 +418,54 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if (unaccounted & AV_CH_TOP_CENTER) {
-        if (av_channel_layout_subset(out_ch_layout, 
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) ==
-                                                    
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) {
+        if ((out_mask & (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) ==
+                        (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_LEFT)) {
             /* U+045 = U-045 = U+135 = U-135 = sqrt(1/4) */
             matrix[TOP_FRONT_LEFT ][TOP_CENTER] += 0.5;
             matrix[TOP_FRONT_RIGHT][TOP_CENTER] += 0.5;
             matrix[TOP_BACK_LEFT ][TOP_CENTER] += 0.5;
             matrix[TOP_BACK_RIGHT][TOP_CENTER] += 0.5;
-        } else if (av_channel_layout_subset(out_ch_layout, 
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) ==
-                                                           
(AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) {
+        } else if ((out_mask & (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) ==
+                               (AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_BACK_CENTER)) {
             /* U+045 = U-045 = UH+180 = sqrt(1/3) */
             matrix[TOP_FRONT_LEFT ][TOP_CENTER] += SQRT1_3;
             matrix[TOP_FRONT_RIGHT][TOP_CENTER] += SQRT1_3;
             matrix[TOP_BACK_CENTER][TOP_CENTER] += SQRT1_3;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_TOP_FRONT_LEFT) >= 0 &&
-                   av_channel_layout_subset(out_ch_layout, 
(AV_CH_BACK_LEFT|AV_CH_SIDE_LEFT))) {
+        } else if (out_mask & AV_CH_TOP_FRONT_LEFT &&
+                   out_mask & (AV_CH_BACK_LEFT|AV_CH_SIDE_LEFT)) {
             /* U+045 = U-045 = M+135 = M-135 = sqrt(1/4) *
              * U+030 = U-030 = M+110 = M-110 = sqrt(1/4) */
             matrix[TOP_FRONT_LEFT ][TOP_CENTER] += 0.5;
             matrix[TOP_FRONT_RIGHT][TOP_CENTER] += 0.5;
-            if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+            if (out_mask & AV_CH_BACK_LEFT) {
                 matrix[BACK_LEFT ][TOP_CENTER] += 0.5;
                 matrix[BACK_RIGHT][TOP_CENTER] += 0.5;
-            } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+            } else if (out_mask & AV_CH_SIDE_LEFT) {
                 matrix[SIDE_LEFT ][TOP_CENTER] += 0.5;
                 matrix[SIDE_RIGHT][TOP_CENTER] += 0.5;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             /* M+030 = M-030 = M+135 = M-135 = sqrt(1/4) */
             /* M+030 = M-030 = sqrt(1/4) */
             matrix[FRONT_LEFT ][TOP_CENTER] += 0.5;
             matrix[FRONT_RIGHT][TOP_CENTER] += 0.5;
-            if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BACK_LEFT) >= 0) {
+            if (out_mask & AV_CH_BACK_LEFT) {
                 matrix[BACK_LEFT ][TOP_CENTER] += 0.5;
                 matrix[BACK_RIGHT][TOP_CENTER] += 0.5;
-            } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_SIDE_LEFT) >= 0) {
+            } else if (out_mask & AV_CH_SIDE_LEFT) {
                 matrix[SIDE_LEFT ][TOP_CENTER] += 0.5;
                 matrix[SIDE_RIGHT][TOP_CENTER] += 0.5;
             }
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][TOP_CENTER] += 0.5;
         } else
             av_assert0(0);
     }
 
     if (unaccounted & AV_CH_BOTTOM_FRONT_CENTER) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][BOTTOM_FRONT_CENTER] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             matrix[FRONT_LEFT ][BOTTOM_FRONT_CENTER] += center_mix_level;
             matrix[FRONT_RIGHT][BOTTOM_FRONT_CENTER] += center_mix_level;
         } else
@@ -472,16 +473,16 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
     }
 
     if (unaccounted & AV_CH_BOTTOM_FRONT_LEFT) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_BOTTOM_FRONT_CENTER) >= 0) {
+        if (out_mask & AV_CH_BOTTOM_FRONT_CENTER) {
             matrix[BOTTOM_FRONT_CENTER][BOTTOM_FRONT_LEFT ] += M_SQRT1_2;
             matrix[BOTTOM_FRONT_CENTER][BOTTOM_FRONT_RIGHT] += M_SQRT1_2;
-            if (av_channel_layout_index_from_channel(in_ch_layout, 
AV_CHAN_BOTTOM_FRONT_CENTER) >= 0)
+            if (in_mask & AV_CH_BOTTOM_FRONT_CENTER)
                 matrix[BOTTOM_FRONT_CENTER][BOTTOM_FRONT_CENTER] = 
center_mix_level * sqrt(2);
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             /* M±030 = 1 */
             matrix[FRONT_LEFT ][BOTTOM_FRONT_LEFT ] += 1.0;
             matrix[FRONT_RIGHT][BOTTOM_FRONT_RIGHT] += 1.0;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][BOTTOM_FRONT_LEFT ] += M_SQRT1_2;
             matrix[FRONT_CENTER][BOTTOM_FRONT_RIGHT] += M_SQRT1_2;
         } else
@@ -490,9 +491,9 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
 
     /* mix LFE into front left/right or center */
     if (unaccounted & AV_CH_LOW_FREQUENCY) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][LOW_FREQUENCY] += lfe_mix_level;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             matrix[FRONT_LEFT ][LOW_FREQUENCY] += lfe_mix_level * M_SQRT1_2;
             matrix[FRONT_RIGHT][LOW_FREQUENCY] += lfe_mix_level * M_SQRT1_2;
         } else
@@ -501,11 +502,11 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
 
     /* mix LFE2 into LFE, front left/right or center */
     if (unaccounted & AV_CH_LOW_FREQUENCY_2) {
-        if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_LOW_FREQUENCY) >= 0) {
+        if (out_mask & AV_CH_LOW_FREQUENCY) {
             matrix[LOW_FREQUENCY][LOW_FREQUENCY_2] += M_SQRT1_2;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_CENTER) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_CENTER) {
             matrix[FRONT_CENTER][LOW_FREQUENCY_2] += lfe_mix_level;
-        } else if (av_channel_layout_index_from_channel(out_ch_layout, 
AV_CHAN_FRONT_LEFT) >= 0) {
+        } else if (out_mask & AV_CH_FRONT_LEFT) {
             matrix[FRONT_LEFT ][LOW_FREQUENCY_2] += lfe_mix_level * M_SQRT1_2;
             matrix[FRONT_RIGHT][LOW_FREQUENCY_2] += lfe_mix_level * M_SQRT1_2;
         } else
@@ -525,9 +526,7 @@ static void build_matrix(const AVChannelLayout 
*in_ch_layout, const AVChannelLay
             if (i < FF_ARRAY_ELEMS(matrix) && j < FF_ARRAY_ELEMS(matrix[0]))
                 matrix_param[stride*out_i + in_i] = matrix[i][j];
             else
-                matrix_param[stride*out_i + in_i] = i == j &&
-                (   av_channel_layout_index_from_channel(in_ch_layout, i) >= 0
-                 && av_channel_layout_index_from_channel(out_ch_layout, i) >= 
0);
+                matrix_param[stride*out_i + in_i] = i == j && (in_mask & 
out_mask & (1ULL << i));
             sum += fabs(matrix_param[stride*out_i + in_i]);
         }
         maxcoef= FFMAX(maxcoef, sum);

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to