This commit adds a slightly more robust way of determining whether the phases match or are too different for IS to be used. --- libavcodec/aaccoder.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/libavcodec/aaccoder.c b/libavcodec/aaccoder.c index 17b14d6..bd232f6 100644 --- a/libavcodec/aaccoder.c +++ b/libavcodec/aaccoder.c @@ -56,6 +56,9 @@ /** Frequency in Hz for lower limit of intensity stereo **/ #define INT_STEREO_LOW_LIMIT 6100 +/** If less than this fraction of coeff phases agree disable IS for that band **/ +#define IS_PHASE_DIFF_LIM 0.11 + /** Total number of usable codebooks **/ #define CB_TOT 12 @@ -1218,9 +1221,9 @@ static void search_for_is(AACEncContext *s, AVCodecContext *avctx, ChannelElemen ener01 += (coef0 + coef1)*(coef0 + coef1); } } - if (!phase) { /* Too much phase difference between channels */ + if (fabs(phase)/(sce0->ics.group_len[w]*sce0->ics.swb_sizes[g]) < IS_PHASE_DIFF_LIM) { start += sce0->ics.swb_sizes[g]; - continue; + continue; /* Too much phase difference */ } phase = av_clip(phase, -1, 1); for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) { -- 2.4.3.573.g4eafbef _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel