Fixes: assertion failure Fixes: 86914558f0a471f038ee1102c02eeb45/signal_sigabrt_7ffff6ae7c37_3051_64ed96a710787ba5d0666746a8562e7d.dee
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <[email protected]> --- libavcodec/aaccoder.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libavcodec/aaccoder.c b/libavcodec/aaccoder.c index 284b401..995724b 100644 --- a/libavcodec/aaccoder.c +++ b/libavcodec/aaccoder.c @@ -196,7 +196,7 @@ typedef struct TrellisPath { static void set_special_band_scalefactors(AACEncContext *s, SingleChannelElement *sce) { int w, g; - int prevscaler_n = -255, prevscaler_i = 0; + int prevscaler_n = -255, prevscaler_i = 0, prevscaler_d = -255; int bands = 0; for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) { @@ -211,6 +211,10 @@ static void set_special_band_scalefactors(AACEncContext *s, SingleChannelElement if (prevscaler_n == -255) prevscaler_n = sce->sf_idx[w*16+g]; bands++; + } else { + if (prevscaler_d == -255) + prevscaler_d = sce->sf_idx[w*16+g]; + bands++; } } } @@ -227,6 +231,8 @@ static void set_special_band_scalefactors(AACEncContext *s, SingleChannelElement sce->sf_idx[w*16+g] = prevscaler_i = av_clip(sce->sf_idx[w*16+g], prevscaler_i - SCALE_MAX_DIFF, prevscaler_i + SCALE_MAX_DIFF); } else if (sce->band_type[w*16+g] == NOISE_BT) { sce->sf_idx[w*16+g] = prevscaler_n = av_clip(sce->sf_idx[w*16+g], prevscaler_n - SCALE_MAX_DIFF, prevscaler_n + SCALE_MAX_DIFF); + } else { + sce->sf_idx[w*16+g] = prevscaler_d = av_clip(sce->sf_idx[w*16+g], prevscaler_d - SCALE_MAX_DIFF, prevscaler_d + SCALE_MAX_DIFF); } } } -- 2.9.3 _______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
