Mercurial > libavcodec.hg
comparison h263dec.c @ 1025:1f9afd8b9131 libavcodec
GetBitContext.size is allways multiplied by 8 -> use size_in_bits to avoid useless *8 in a few inner loops
author | michaelni |
---|---|
date | Tue, 21 Jan 2003 17:34:12 +0000 |
parents | 3b9c2ac59ec4 |
children | d6ba0641cc36 |
comparison
equal
deleted
inserted
replaced
1024:9cc1031e1864 | 1025:1f9afd8b9131 |
---|---|
247 assert(s->mb_x==0 && s->mb_y==s->mb_height); | 247 assert(s->mb_x==0 && s->mb_y==s->mb_height); |
248 | 248 |
249 /* try to detect the padding bug */ | 249 /* try to detect the padding bug */ |
250 if( s->codec_id==CODEC_ID_MPEG4 | 250 if( s->codec_id==CODEC_ID_MPEG4 |
251 && (s->workaround_bugs&FF_BUG_AUTODETECT) | 251 && (s->workaround_bugs&FF_BUG_AUTODETECT) |
252 && s->gb.size*8 - get_bits_count(&s->gb) >=0 | 252 && s->gb.size_in_bits - get_bits_count(&s->gb) >=0 |
253 && s->gb.size*8 - get_bits_count(&s->gb) < 48 | 253 && s->gb.size_in_bits - get_bits_count(&s->gb) < 48 |
254 // && !s->resync_marker | 254 // && !s->resync_marker |
255 && !s->data_partitioning){ | 255 && !s->data_partitioning){ |
256 | 256 |
257 const int bits_count= get_bits_count(&s->gb); | 257 const int bits_count= get_bits_count(&s->gb); |
258 const int bits_left = s->gb.size*8 - bits_count; | 258 const int bits_left = s->gb.size_in_bits - bits_count; |
259 | 259 |
260 if(bits_left==0){ | 260 if(bits_left==0){ |
261 s->padding_bug_score+=16; | 261 s->padding_bug_score+=16; |
262 }else if(bits_left>8){ | 262 }else if(bits_left>8){ |
263 s->padding_bug_score++; | 263 s->padding_bug_score++; |
272 } | 272 } |
273 } | 273 } |
274 | 274 |
275 // handle formats which dont have unique end markers | 275 // handle formats which dont have unique end markers |
276 if(s->msmpeg4_version || (s->workaround_bugs&FF_BUG_NO_PADDING)){ //FIXME perhaps solve this more cleanly | 276 if(s->msmpeg4_version || (s->workaround_bugs&FF_BUG_NO_PADDING)){ //FIXME perhaps solve this more cleanly |
277 int left= s->gb.size*8 - get_bits_count(&s->gb); | 277 int left= s->gb.size_in_bits - get_bits_count(&s->gb); |
278 int max_extra=7; | 278 int max_extra=7; |
279 | 279 |
280 /* no markers in M$ crap */ | 280 /* no markers in M$ crap */ |
281 if(s->msmpeg4_version && s->pict_type==I_TYPE) | 281 if(s->msmpeg4_version && s->pict_type==I_TYPE) |
282 max_extra+= 17; | 282 max_extra+= 17; |
297 | 297 |
298 return 0; | 298 return 0; |
299 } | 299 } |
300 | 300 |
301 fprintf(stderr, "slice end not reached but screenspace end (%d left %06X)\n", | 301 fprintf(stderr, "slice end not reached but screenspace end (%d left %06X)\n", |
302 s->gb.size*8 - get_bits_count(&s->gb), | 302 s->gb.size_in_bits - get_bits_count(&s->gb), |
303 show_bits(&s->gb, 24)); | 303 show_bits(&s->gb, 24)); |
304 return -1; | 304 return -1; |
305 } | 305 } |
306 | 306 |
307 /** | 307 /** |
439 } | 439 } |
440 | 440 |
441 retry: | 441 retry: |
442 | 442 |
443 if(s->bitstream_buffer_size && buf_size<20){ //divx 5.01+ frame reorder | 443 if(s->bitstream_buffer_size && buf_size<20){ //divx 5.01+ frame reorder |
444 init_get_bits(&s->gb, s->bitstream_buffer, s->bitstream_buffer_size); | 444 init_get_bits(&s->gb, s->bitstream_buffer, s->bitstream_buffer_size*8); |
445 }else | 445 }else |
446 init_get_bits(&s->gb, buf, buf_size); | 446 init_get_bits(&s->gb, buf, buf_size*8); |
447 s->bitstream_buffer_size=0; | 447 s->bitstream_buffer_size=0; |
448 | 448 |
449 if (!s->context_initialized) { | 449 if (!s->context_initialized) { |
450 if (MPV_common_init(s) < 0) //we need the idct permutaton for reading a custom matrix | 450 if (MPV_common_init(s) < 0) //we need the idct permutaton for reading a custom matrix |
451 return -1; | 451 return -1; |
458 ret = msmpeg4_decode_picture_header(s); | 458 ret = msmpeg4_decode_picture_header(s); |
459 } else if (s->h263_pred) { | 459 } else if (s->h263_pred) { |
460 if(s->avctx->extradata_size && s->picture_number==0){ | 460 if(s->avctx->extradata_size && s->picture_number==0){ |
461 GetBitContext gb; | 461 GetBitContext gb; |
462 | 462 |
463 init_get_bits(&gb, s->avctx->extradata, s->avctx->extradata_size); | 463 init_get_bits(&gb, s->avctx->extradata, s->avctx->extradata_size*8); |
464 ret = ff_mpeg4_decode_picture_header(s, &gb); | 464 ret = ff_mpeg4_decode_picture_header(s, &gb); |
465 } | 465 } |
466 ret = ff_mpeg4_decode_picture_header(s, &s->gb); | 466 ret = ff_mpeg4_decode_picture_header(s, &s->gb); |
467 | 467 |
468 if(s->flags& CODEC_FLAG_LOW_DELAY) | 468 if(s->flags& CODEC_FLAG_LOW_DELAY) |
630 s->mb_x=0; | 630 s->mb_x=0; |
631 s->mb_y=0; | 631 s->mb_y=0; |
632 | 632 |
633 decode_slice(s); | 633 decode_slice(s); |
634 s->error_status_table[0]|= VP_START; | 634 s->error_status_table[0]|= VP_START; |
635 while(s->mb_y<s->mb_height && s->gb.size*8 - get_bits_count(&s->gb)>16){ | 635 while(s->mb_y<s->mb_height && s->gb.size_in_bits - get_bits_count(&s->gb)>16){ |
636 if(s->msmpeg4_version){ | 636 if(s->msmpeg4_version){ |
637 if(s->mb_x!=0 || (s->mb_y%s->slice_height)!=0) | 637 if(s->mb_x!=0 || (s->mb_y%s->slice_height)!=0) |
638 break; | 638 break; |
639 }else{ | 639 }else{ |
640 if(ff_h263_resync(s)<0) | 640 if(ff_h263_resync(s)<0) |