aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-08-27 07:28:55 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-09-09 13:47:30 +0200
commit9d1f58424aa3154e63b7c7cfed6c5311ad6a6ccc (patch)
tree987dcab5b29915a1524e1b55563700ae50744666
parent0952f8f909fa723d790ceb43e562e316efbf99dd (diff)
downloadffmpeg-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.c32
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;
}