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 }