diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-08-27 07:28:55 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-09-09 13:47:30 +0200 |
commit | 9d1f58424aa3154e63b7c7cfed6c5311ad6a6ccc (patch) | |
tree | 987dcab5b29915a1524e1b55563700ae50744666 | |
parent | 0952f8f909fa723d790ceb43e562e316efbf99dd (diff) | |
download | ffmpeg-9d1f58424aa3154e63b7c7cfed6c5311ad6a6ccc.tar.gz |
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@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavfilter/af_headphone.c | 32 |
1 files 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; } |