Mercurial > libavcodec.hg
comparison h263.c @ 1873:c26242faa246 libavcodec
mb stuffing in partitioned frames fix
author | michael |
---|---|
date | Wed, 10 Mar 2004 23:13:43 +0000 |
parents | c13d3543c73a |
children | 779bdf5063ce |
comparison
equal
deleted
inserted
replaced
1872:c13d3543c73a | 1873:c26242faa246 |
---|---|
3334 s->first_slice_line=0; | 3334 s->first_slice_line=0; |
3335 | 3335 |
3336 if(s->pict_type==I_TYPE){ | 3336 if(s->pict_type==I_TYPE){ |
3337 int i; | 3337 int i; |
3338 | 3338 |
3339 if(show_bits_long(&s->gb, 19)==DC_MARKER){ | |
3340 return mb_num-1; | |
3341 } | |
3342 | |
3343 do{ | 3339 do{ |
3340 if(show_bits_long(&s->gb, 19)==DC_MARKER){ | |
3341 return mb_num-1; | |
3342 } | |
3343 | |
3344 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); | 3344 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); |
3345 if (cbpc < 0){ | 3345 if (cbpc < 0){ |
3346 av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); | 3346 av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); |
3347 return -1; | 3347 return -1; |
3348 } | 3348 } |
3349 }while(cbpc == 8); | 3349 }while(cbpc == 8); |
3350 | 3350 |
3351 s->cbp_table[xy]= cbpc & 3; | 3351 s->cbp_table[xy]= cbpc & 3; |
3352 s->current_picture.mb_type[xy]= MB_TYPE_INTRA; | 3352 s->current_picture.mb_type[xy]= MB_TYPE_INTRA; |
3353 s->mb_intra = 1; | 3353 s->mb_intra = 1; |
3354 | 3354 |
3355 if(cbpc & 4) { | 3355 if(cbpc & 4) { |
3372 }else{ /* P/S_TYPE */ | 3372 }else{ /* P/S_TYPE */ |
3373 int mx, my, pred_x, pred_y, bits; | 3373 int mx, my, pred_x, pred_y, bits; |
3374 int16_t * const mot_val= s->current_picture.motion_val[0][s->block_index[0]]; | 3374 int16_t * const mot_val= s->current_picture.motion_val[0][s->block_index[0]]; |
3375 const int stride= s->block_wrap[0]*2; | 3375 const int stride= s->block_wrap[0]*2; |
3376 | 3376 |
3377 // do{ //FIXME | 3377 try_again: |
3378 bits= show_bits(&s->gb, 17); | 3378 bits= show_bits(&s->gb, 17); |
3379 if(bits==MOTION_MARKER){ | 3379 if(bits==MOTION_MARKER){ |
3380 return mb_num-1; | 3380 return mb_num-1; |
3381 } | 3381 } |
3382 skip_bits1(&s->gb); | 3382 skip_bits1(&s->gb); |
3403 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); | 3403 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); |
3404 if (cbpc < 0){ | 3404 if (cbpc < 0){ |
3405 av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); | 3405 av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); |
3406 return -1; | 3406 return -1; |
3407 } | 3407 } |
3408 // }while(cbpc == 20); | 3408 if(cbpc == 20) |
3409 goto try_again; | |
3409 | 3410 |
3410 s->cbp_table[xy]= cbpc&(8+3); //8 is dquant | 3411 s->cbp_table[xy]= cbpc&(8+3); //8 is dquant |
3411 | 3412 |
3412 s->mb_intra = ((cbpc & 4) != 0); | 3413 s->mb_intra = ((cbpc & 4) != 0); |
3413 | 3414 |
3584 } | 3585 } |
3585 | 3586 |
3586 s->mb_num_left= mb_num; | 3587 s->mb_num_left= mb_num; |
3587 | 3588 |
3588 if(s->pict_type==I_TYPE){ | 3589 if(s->pict_type==I_TYPE){ |
3590 while(show_bits(&s->gb, 9) == 1) | |
3591 skip_bits(&s->gb, 9); | |
3589 if(get_bits_long(&s->gb, 19)!=DC_MARKER){ | 3592 if(get_bits_long(&s->gb, 19)!=DC_MARKER){ |
3590 av_log(s->avctx, AV_LOG_ERROR, "marker missing after first I partition at %d %d\n", s->mb_x, s->mb_y); | 3593 av_log(s->avctx, AV_LOG_ERROR, "marker missing after first I partition at %d %d\n", s->mb_x, s->mb_y); |
3591 return -1; | 3594 return -1; |
3592 } | 3595 } |
3593 }else{ | 3596 }else{ |
3597 while(show_bits(&s->gb, 10) == 1) | |
3598 skip_bits(&s->gb, 10); | |
3594 if(get_bits(&s->gb, 17)!=MOTION_MARKER){ | 3599 if(get_bits(&s->gb, 17)!=MOTION_MARKER){ |
3595 av_log(s->avctx, AV_LOG_ERROR, "marker missing after first P partition at %d %d\n", s->mb_x, s->mb_y); | 3600 av_log(s->avctx, AV_LOG_ERROR, "marker missing after first P partition at %d %d\n", s->mb_x, s->mb_y); |
3596 return -1; | 3601 return -1; |
3597 } | 3602 } |
3598 } | 3603 } |