[FFmpeg-cvslog] avfilter/af_headphone: Simplify finding channel index

Andreas Rheinhardt git at videolan.org
Wed Sep 9 16:00:10 EEST 2020


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Thu Aug 27 07:28:55 2020 +0200| [9d1f58424aa3154e63b7c7cfed6c5311ad6a6ccc] | committer: Andreas Rheinhardt

avfilter/af_headphone: Simplify finding channel index

Before this commit, the headphone filter called
av_channel_layout_extract_channel() in a loop in order to find out
the index of a channel (given via its AV_CH_* value) in a channel layout.
This commit changes this to av_get_channel_layout_channel_index()
instead.

Reviewed-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9d1f58424aa3154e63b7c7cfed6c5311ad6a6ccc
---

 libavfilter/af_headphone.c | 32 ++++++++------------------------
 1 file changed, 8 insertions(+), 24 deletions(-)

diff --git a/libavfilter/af_headphone.c b/libavfilter/af_headphone.c
index d6647ff80b..b5c2bd6121 100644
--- a/libavfilter/af_headphone.c
+++ b/libavfilter/af_headphone.c
@@ -100,7 +100,6 @@ static void parse_map(AVFilterContext *ctx)
     char *arg, *tokenizer, *p;
     uint64_t used_channels = 0;
 
-    s->lfe_channel = -1;
     s->nb_inputs = 1;
 
     p = s->map;
@@ -452,18 +451,9 @@ static int convert_coeffs(AVFilterContext *ctx, AVFilterLink *inlink)
         ptr = (float *)s->in[i + 1].frame->extended_data[0];
 
         if (s->hrir_fmt == HRIR_STEREO) {
-            int idx = -1;
-
-            for (j = 0; j < inlink->channels; j++) {
-                if ((av_channel_layout_extract_channel(inlink->channel_layout, j)) == s->mapping[i]) {
-                    idx = j;
-                    if (s->mapping[i] == AV_CH_LOW_FREQUENCY)
-                        s->lfe_channel = j;
-                    break;
-                }
-            }
-
-            if (idx == -1)
+            int idx = av_get_channel_layout_channel_index(inlink->channel_layout,
+                                                          s->mapping[i]);
+            if (idx < 0)
                 continue;
             if (s->type == TIME_DOMAIN) {
                 float *data_ir_l = s->data_ir[0] + idx * s->air_len;
@@ -494,17 +484,9 @@ static int convert_coeffs(AVFilterContext *ctx, AVFilterLink *inlink)
             int I, N = ctx->inputs[1]->channels;
 
             for (k = 0; k < N / 2; k++) {
-                int idx = -1;
-
-                for (j = 0; j < inlink->channels; j++) {
-                    if ((av_channel_layout_extract_channel(inlink->channel_layout, j)) == s->mapping[k]) {
-                        idx = j;
-                        if (s->mapping[k] == AV_CH_LOW_FREQUENCY)
-                            s->lfe_channel = j;
-                        break;
-                    }
-                }
-                if (idx == -1)
+                int idx = av_get_channel_layout_channel_index(inlink->channel_layout,
+                                                              s->mapping[k]);
+                if (idx < 0)
                     continue;
 
                 I = k * 2;
@@ -671,6 +653,8 @@ static int config_input(AVFilterLink *inlink)
         return AVERROR(EINVAL);
     }
 
+    s->lfe_channel = av_get_channel_layout_channel_index(inlink->channel_layout,
+                                                         AV_CH_LOW_FREQUENCY);
     return 0;
 }
 



More information about the ffmpeg-cvslog mailing list