From 1956cfbaedd364b30095e956fc881f7eaa1e21ff Mon Sep 17 00:00:00 2001 From: Rostislav Pehlivanov Date: Sun, 6 Sep 2015 18:36:42 +0100 Subject: aacenc_is: take absolute coefficient value upon energy calculations This was an oversight when the IS system was being first implemented. The ener01 part was largely a result of trial and error and the fact that the sum of coef0 and coef1 could result in a zero was overlooked. Once ener01 turns to zero it's used to divide the left channel energy which doesn't turn out so well as it fills IS[] with -nan's and inf's which in turn confused the quantize_band_cost. Signed-off-by: Rostislav Pehlivanov --- libavcodec/aacenc_is.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libavcodec') diff --git a/libavcodec/aacenc_is.c b/libavcodec/aacenc_is.c index 95ba3f8d50..e983b7548f 100644 --- a/libavcodec/aacenc_is.c +++ b/libavcodec/aacenc_is.c @@ -114,8 +114,8 @@ void ff_aac_search_for_is(AACEncContext *s, AVCodecContext *avctx, ChannelElemen } for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) { for (i = 0; i < sce0->ics.swb_sizes[g]; i++) { - float coef0 = sce0->pcoeffs[start+(w+w2)*128+i]; - float coef1 = sce1->pcoeffs[start+(w+w2)*128+i]; + float coef0 = fabsf(sce0->pcoeffs[start+(w+w2)*128+i]); + float coef1 = fabsf(sce1->pcoeffs[start+(w+w2)*128+i]); ener0 += coef0*coef0; ener1 += coef1*coef1; ener01 += (coef0 + coef1)*(coef0 + coef1); -- cgit v1.2.3