[FFmpeg-cvslog] r14135 - trunk/libavcodec/h264.c
michael
subversion
Wed Jul 9 08:03:59 CEST 2008
Author: michael
Date: Wed Jul 9 08:03:59 2008
New Revision: 14135
Log:
fix IPCM_decode_error.h264
Modified:
trunk/libavcodec/h264.c
Modified: trunk/libavcodec/h264.c
==============================================================================
--- trunk/libavcodec/h264.c (original)
+++ trunk/libavcodec/h264.c Wed Jul 9 08:03:59 2008
@@ -4352,12 +4352,11 @@ static int decode_residual(H264Context *
level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part
else
level_code= prefix + get_bits(gb, 4); //part
- }else if(prefix==15){
- level_code= (prefix<<suffix_length) + get_bits(gb, 12); //part
- if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense
}else{
- av_log(h->s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y);
- return -1;
+ level_code= (15<<suffix_length) + get_bits(gb, prefix-3); //part
+ if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense
+ if(prefix>=16)
+ level_code += (1<<(prefix-3))-4096;
}
if(trailing_ones < 3) level_code += 2;
@@ -4375,11 +4374,10 @@ static int decode_residual(H264Context *
prefix = get_level_prefix(gb);
if(prefix<15){
level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length);
- }else if(prefix==15){
- level_code = (prefix<<suffix_length) + get_bits(gb, 12);
}else{
- av_log(h->s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y);
- return -1;
+ level_code = (15<<suffix_length) + get_bits(gb, prefix-3);
+ if(prefix>=16)
+ level_code += (1<<(prefix-3))-4096;
}
mask= -(level_code&1);
level[i]= (((2+level_code)>>1) ^ mask) - mask;
More information about the ffmpeg-cvslog
mailing list