mirror of https://git.ffmpeg.org/ffmpeg.git
coefficient saturation fix
Originally committed as revision 3224 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ca6ecf50f9
commit
caacc47ff9
|
@ -4717,8 +4717,6 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
|
|||
|
||||
if (cache&0x80000000) {
|
||||
if (cache&0x40000000) {
|
||||
int ulevel;
|
||||
|
||||
/* third escape */
|
||||
SKIP_CACHE(re, &s->gb, 2);
|
||||
last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
|
||||
|
@ -4744,16 +4742,6 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
|
|||
SKIP_COUNTER(re, &s->gb, 1+12+1);
|
||||
}
|
||||
|
||||
if(s->mpeg_quant){
|
||||
if(intra) ulevel= level*s->qscale*s->intra_matrix[scan_table[1]];
|
||||
else ulevel= level*s->qscale*s->inter_matrix[scan_table[0]];
|
||||
}else
|
||||
ulevel= level*s->qscale*16;
|
||||
if(ulevel>1030*16 || ulevel<-1030*16){
|
||||
av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if(s->error_resilience >= FF_ER_COMPLIANT){
|
||||
const int abs_level= ABS(level);
|
||||
|
@ -4779,6 +4767,16 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
|
|||
if (level>0) level= level * qmul + qadd;
|
||||
else level= level * qmul - qadd;
|
||||
|
||||
if((unsigned)(level + 2048) > 4095){
|
||||
if(s->error_resilience > FF_ER_COMPLIANT){
|
||||
if(level > 2560 || level<-2560){
|
||||
av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
level= level<0 ? -2048 : 2047;
|
||||
}
|
||||
|
||||
i+= run + 1;
|
||||
if(last) i+=192;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue