X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fg723_1dec.c;h=c8202a937c4f85afd055c0a870fca243de1db576;hb=752dd1952a7b68094f8b2d5da0ca0df94190cf0e;hp=aaa26c24efcff0cae2e4c67f78581ad1cd247ee3;hpb=091c9860559e4d33179747c5d651bc9e31bd76eb;p=ffmpeg diff --git a/libavcodec/g723_1dec.c b/libavcodec/g723_1dec.c index aaa26c24efc..c8202a937c4 100644 --- a/libavcodec/g723_1dec.c +++ b/libavcodec/g723_1dec.c @@ -660,9 +660,15 @@ static int estimate_sid_gain(G723_1_Context *p) int i, shift, seg, seg2, t, val, val_add, x, y; shift = 16 - p->cur_gain * 2; - if (shift > 0) - t = p->sid_gain << shift; - else + if (shift > 0) { + if (p->sid_gain == 0) { + t = 0; + } else if (shift >= 31 || (int32_t)((uint32_t)p->sid_gain << shift) >> shift != p->sid_gain) { + if (p->sid_gain < 0) t = INT32_MIN; + else t = INT32_MAX; + } else + t = p->sid_gain << shift; + }else t = p->sid_gain >> -shift; x = av_clipl_int32(t * (int64_t)cng_filt[0] >> 16);