summaryrefslogtreecommitdiff
path: root/libavfilter/f_ebur128.c
diff options
context:
space:
mode:
authorClément Bœsch <u@pkh.me>2014-09-06 13:47:59 +0200
committerClément Bœsch <u@pkh.me>2014-09-06 13:47:59 +0200
commitb2c0b80f62912f932cc3bb04621408601a9ed4d5 (patch)
tree90788fc120f7b8546622177178a060e2cf190b9f /libavfilter/f_ebur128.c
parent1654ca7d4e233d4502fcc1ea3ba7ea8dbf025872 (diff)
downloadffmpeg-b2c0b80f62912f932cc3bb04621408601a9ed4d5.tar.gz
avfilter/ebur128: rework channel weighting definition code
Should fix CID1194399 (Bad bit shift operation)
Diffstat (limited to 'libavfilter/f_ebur128.c')
-rw-r--r--libavfilter/f_ebur128.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c
index a02cf28723..c18ae79915 100644
--- a/libavfilter/f_ebur128.c
+++ b/libavfilter/f_ebur128.c
@@ -363,7 +363,6 @@ static int config_audio_input(AVFilterLink *inlink)
static int config_audio_output(AVFilterLink *outlink)
{
int i;
- int idx_bitposn = 0;
AVFilterContext *ctx = outlink->src;
EBUR128Context *ebur128 = ctx->priv;
const int nb_channels = av_get_channel_layout_nb_channels(outlink->channel_layout);
@@ -379,23 +378,16 @@ static int config_audio_output(AVFilterLink *outlink)
return AVERROR(ENOMEM);
for (i = 0; i < nb_channels; i++) {
-
- /* find the next bit that is set starting from the right */
- while ((outlink->channel_layout & 1ULL<<idx_bitposn) == 0 && idx_bitposn < 63)
- idx_bitposn++;
-
/* channel weighting */
- if ((1ULL<<idx_bitposn & AV_CH_LOW_FREQUENCY) ||
- (1ULL<<idx_bitposn & AV_CH_LOW_FREQUENCY_2)) {
+ const uint16_t chl = av_channel_layout_extract_channel(outlink->channel_layout, i);
+ if (chl & (AV_CH_LOW_FREQUENCY|AV_CH_LOW_FREQUENCY_2)) {
ebur128->ch_weighting[i] = 0;
- } else if (1ULL<<idx_bitposn & BACK_MASK) {
+ } else if (chl & BACK_MASK) {
ebur128->ch_weighting[i] = 1.41;
} else {
ebur128->ch_weighting[i] = 1.0;
}
- idx_bitposn++;
-
if (!ebur128->ch_weighting[i])
continue;