Mercurial > libavcodec.hg
comparison h263.c @ 1598:932d306bf1dc libavcodec
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
author | michael |
---|---|
date | Mon, 03 Nov 2003 13:26:22 +0000 |
parents | 3d1d0490e5a6 |
children | 27806cccec2a |
comparison
equal
deleted
inserted
replaced
1597:4c9165372ab3 | 1598:932d306bf1dc |
---|---|
615 int cbp, i; | 615 int cbp, i; |
616 | 616 |
617 if(s->flags & CODEC_FLAG_CBP_RD){ | 617 if(s->flags & CODEC_FLAG_CBP_RD){ |
618 int best_cbpy_score= INT_MAX; | 618 int best_cbpy_score= INT_MAX; |
619 int best_cbpc_score= INT_MAX; | 619 int best_cbpc_score= INT_MAX; |
620 int cbpc, cbpy; | 620 int cbpc = (-1), cbpy= (-1); |
621 const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0); | 621 const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0); |
622 const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6); | 622 const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6); |
623 | 623 |
624 for(i=0; i<4; i++){ | 624 for(i=0; i<4; i++){ |
625 int score= inter_MCBPC_bits[i + offset] * lambda; | 625 int score= inter_MCBPC_bits[i + offset] * lambda; |
826 s->last_mv[0][0][0]= motion_x; | 826 s->last_mv[0][0][0]= motion_x; |
827 s->last_mv[0][0][1]= motion_y; | 827 s->last_mv[0][0][1]= motion_y; |
828 s->f_count++; | 828 s->f_count++; |
829 break; | 829 break; |
830 default: | 830 default: |
831 printf("unknown mb type\n"); | 831 av_log(s->avctx, AV_LOG_ERROR, "unknown mb type\n"); |
832 return; | 832 return; |
833 } | 833 } |
834 | 834 |
835 if(interleaved_stats){ | 835 if(interleaved_stats){ |
836 s->mv_bits+= get_bits_diff(s); | 836 s->mv_bits+= get_bits_diff(s); |
2719 for(len=0; len<32; len++){ | 2719 for(len=0; len<32; len++){ |
2720 if(get_bits1(&s->gb)) break; | 2720 if(get_bits1(&s->gb)) break; |
2721 } | 2721 } |
2722 | 2722 |
2723 if(len!=ff_mpeg4_get_video_packet_prefix_length(s)){ | 2723 if(len!=ff_mpeg4_get_video_packet_prefix_length(s)){ |
2724 printf("marker does not match f_code\n"); | 2724 av_log(s->avctx, AV_LOG_ERROR, "marker does not match f_code\n"); |
2725 return -1; | 2725 return -1; |
2726 } | 2726 } |
2727 | 2727 |
2728 if(s->shape != RECT_SHAPE){ | 2728 if(s->shape != RECT_SHAPE){ |
2729 header_extension= get_bits1(&s->gb); | 2729 header_extension= get_bits1(&s->gb); |
2730 //FIXME more stuff here | 2730 //FIXME more stuff here |
2731 } | 2731 } |
2732 | 2732 |
2733 mb_num= get_bits(&s->gb, mb_num_bits); | 2733 mb_num= get_bits(&s->gb, mb_num_bits); |
2734 if(mb_num>=s->mb_num){ | 2734 if(mb_num>=s->mb_num){ |
2735 fprintf(stderr, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_num); | 2735 av_log(s->avctx, AV_LOG_ERROR, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_num); |
2736 return -1; | 2736 return -1; |
2737 } | 2737 } |
2738 if(s->pict_type == B_TYPE){ | 2738 if(s->pict_type == B_TYPE){ |
2739 while(s->next_picture.mbskip_table[ s->mb_index2xy[ mb_num ] ]) mb_num++; | 2739 while(s->next_picture.mbskip_table[ s->mb_index2xy[ mb_num ] ]) mb_num++; |
2740 if(mb_num >= s->mb_num) return -1; // slice contains just skiped MBs which where allready decoded | 2740 if(mb_num >= s->mb_num) return -1; // slice contains just skiped MBs which where allready decoded |
2769 if(s->shape != BIN_ONLY_SHAPE){ | 2769 if(s->shape != BIN_ONLY_SHAPE){ |
2770 skip_bits(&s->gb, 3); /* intra dc vlc threshold */ | 2770 skip_bits(&s->gb, 3); /* intra dc vlc threshold */ |
2771 //FIXME dont just ignore everything | 2771 //FIXME dont just ignore everything |
2772 if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){ | 2772 if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){ |
2773 mpeg4_decode_sprite_trajectory(s); | 2773 mpeg4_decode_sprite_trajectory(s); |
2774 fprintf(stderr, "untested\n"); | 2774 av_log(s->avctx, AV_LOG_ERROR, "untested\n"); |
2775 } | 2775 } |
2776 | 2776 |
2777 //FIXME reduced res stuff here | 2777 //FIXME reduced res stuff here |
2778 | 2778 |
2779 if (s->pict_type != I_TYPE) { | 2779 if (s->pict_type != I_TYPE) { |
2780 int f_code = get_bits(&s->gb, 3); /* fcode_for */ | 2780 int f_code = get_bits(&s->gb, 3); /* fcode_for */ |
2781 if(f_code==0){ | 2781 if(f_code==0){ |
2782 printf("Error, video packet header damaged (f_code=0)\n"); | 2782 av_log(s->avctx, AV_LOG_ERROR, "Error, video packet header damaged (f_code=0)\n"); |
2783 } | 2783 } |
2784 } | 2784 } |
2785 if (s->pict_type == B_TYPE) { | 2785 if (s->pict_type == B_TYPE) { |
2786 int b_code = get_bits(&s->gb, 3); | 2786 int b_code = get_bits(&s->gb, 3); |
2787 if(b_code==0){ | 2787 if(b_code==0){ |
2788 printf("Error, video packet header damaged (b_code=0)\n"); | 2788 av_log(s->avctx, AV_LOG_ERROR, "Error, video packet header damaged (b_code=0)\n"); |
2789 } | 2789 } |
2790 } | 2790 } |
2791 } | 2791 } |
2792 } | 2792 } |
2793 //FIXME new-pred stuff | 2793 //FIXME new-pred stuff |
2946 } | 2946 } |
2947 | 2947 |
2948 do{ | 2948 do{ |
2949 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); | 2949 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); |
2950 if (cbpc < 0){ | 2950 if (cbpc < 0){ |
2951 fprintf(stderr, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); | 2951 av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); |
2952 return -1; | 2952 return -1; |
2953 } | 2953 } |
2954 }while(cbpc == 8); | 2954 }while(cbpc == 8); |
2955 | 2955 |
2956 s->cbp_table[xy]= cbpc & 3; | 2956 s->cbp_table[xy]= cbpc & 3; |
2965 s->mbintra_table[xy]= 1; | 2965 s->mbintra_table[xy]= 1; |
2966 for(i=0; i<6; i++){ | 2966 for(i=0; i<6; i++){ |
2967 int dc_pred_dir; | 2967 int dc_pred_dir; |
2968 int dc= mpeg4_decode_dc(s, i, &dc_pred_dir); | 2968 int dc= mpeg4_decode_dc(s, i, &dc_pred_dir); |
2969 if(dc < 0){ | 2969 if(dc < 0){ |
2970 fprintf(stderr, "DC corrupted at %d %d\n", s->mb_x, s->mb_y); | 2970 av_log(s->avctx, AV_LOG_ERROR, "DC corrupted at %d %d\n", s->mb_x, s->mb_y); |
2971 return -1; | 2971 return -1; |
2972 } | 2972 } |
2973 dir<<=1; | 2973 dir<<=1; |
2974 if(dc_pred_dir) dir|=1; | 2974 if(dc_pred_dir) dir|=1; |
2975 } | 2975 } |
3005 continue; | 3005 continue; |
3006 } | 3006 } |
3007 | 3007 |
3008 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); | 3008 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); |
3009 if (cbpc < 0){ | 3009 if (cbpc < 0){ |
3010 fprintf(stderr, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); | 3010 av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y); |
3011 return -1; | 3011 return -1; |
3012 } | 3012 } |
3013 // }while(cbpc == 20); | 3013 // }while(cbpc == 20); |
3014 | 3014 |
3015 s->cbp_table[xy]= cbpc&(8+3); //8 is dquant | 3015 s->cbp_table[xy]= cbpc&(8+3); //8 is dquant |
3101 | 3101 |
3102 if(s->pict_type==I_TYPE){ | 3102 if(s->pict_type==I_TYPE){ |
3103 int ac_pred= get_bits1(&s->gb); | 3103 int ac_pred= get_bits1(&s->gb); |
3104 int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); | 3104 int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); |
3105 if(cbpy<0){ | 3105 if(cbpy<0){ |
3106 fprintf(stderr, "cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); | 3106 av_log(s->avctx, AV_LOG_ERROR, "cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); |
3107 return -1; | 3107 return -1; |
3108 } | 3108 } |
3109 | 3109 |
3110 s->cbp_table[xy]|= cbpy<<2; | 3110 s->cbp_table[xy]|= cbpy<<2; |
3111 s->current_picture.mb_type[xy] |= ac_pred*MB_TYPE_ACPRED; | 3111 s->current_picture.mb_type[xy] |= ac_pred*MB_TYPE_ACPRED; |
3114 int dir=0,i; | 3114 int dir=0,i; |
3115 int ac_pred = get_bits1(&s->gb); | 3115 int ac_pred = get_bits1(&s->gb); |
3116 int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); | 3116 int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); |
3117 | 3117 |
3118 if(cbpy<0){ | 3118 if(cbpy<0){ |
3119 fprintf(stderr, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); | 3119 av_log(s->avctx, AV_LOG_ERROR, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); |
3120 return -1; | 3120 return -1; |
3121 } | 3121 } |
3122 | 3122 |
3123 if(s->cbp_table[xy] & 8) { | 3123 if(s->cbp_table[xy] & 8) { |
3124 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); | 3124 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); |
3127 | 3127 |
3128 for(i=0; i<6; i++){ | 3128 for(i=0; i<6; i++){ |
3129 int dc_pred_dir; | 3129 int dc_pred_dir; |
3130 int dc= mpeg4_decode_dc(s, i, &dc_pred_dir); | 3130 int dc= mpeg4_decode_dc(s, i, &dc_pred_dir); |
3131 if(dc < 0){ | 3131 if(dc < 0){ |
3132 fprintf(stderr, "DC corrupted at %d %d\n", s->mb_x, s->mb_y); | 3132 av_log(s->avctx, AV_LOG_ERROR, "DC corrupted at %d %d\n", s->mb_x, s->mb_y); |
3133 return -1; | 3133 return -1; |
3134 } | 3134 } |
3135 dir<<=1; | 3135 dir<<=1; |
3136 if(dc_pred_dir) dir|=1; | 3136 if(dc_pred_dir) dir|=1; |
3137 } | 3137 } |
3144 s->cbp_table[xy]= 0; | 3144 s->cbp_table[xy]= 0; |
3145 }else{ | 3145 }else{ |
3146 int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); | 3146 int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); |
3147 | 3147 |
3148 if(cbpy<0){ | 3148 if(cbpy<0){ |
3149 fprintf(stderr, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); | 3149 av_log(s->avctx, AV_LOG_ERROR, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); |
3150 return -1; | 3150 return -1; |
3151 } | 3151 } |
3152 | 3152 |
3153 if(s->cbp_table[xy] & 8) { | 3153 if(s->cbp_table[xy] & 8) { |
3154 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); | 3154 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); |
3181 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error); | 3181 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error); |
3182 return -1; | 3182 return -1; |
3183 } | 3183 } |
3184 | 3184 |
3185 if(s->resync_mb_x + s->resync_mb_y*s->mb_width + mb_num > s->mb_num){ | 3185 if(s->resync_mb_x + s->resync_mb_y*s->mb_width + mb_num > s->mb_num){ |
3186 fprintf(stderr, "slice below monitor ...\n"); | 3186 av_log(s->avctx, AV_LOG_ERROR, "slice below monitor ...\n"); |
3187 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error); | 3187 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error); |
3188 return -1; | 3188 return -1; |
3189 } | 3189 } |
3190 | 3190 |
3191 s->mb_num_left= mb_num; | 3191 s->mb_num_left= mb_num; |
3192 | 3192 |
3193 if(s->pict_type==I_TYPE){ | 3193 if(s->pict_type==I_TYPE){ |
3194 if(get_bits_long(&s->gb, 19)!=DC_MARKER){ | 3194 if(get_bits_long(&s->gb, 19)!=DC_MARKER){ |
3195 fprintf(stderr, "marker missing after first I partition at %d %d\n", s->mb_x, s->mb_y); | 3195 av_log(s->avctx, AV_LOG_ERROR, "marker missing after first I partition at %d %d\n", s->mb_x, s->mb_y); |
3196 return -1; | 3196 return -1; |
3197 } | 3197 } |
3198 }else{ | 3198 }else{ |
3199 if(get_bits(&s->gb, 17)!=MOTION_MARKER){ | 3199 if(get_bits(&s->gb, 17)!=MOTION_MARKER){ |
3200 fprintf(stderr, "marker missing after first P partition at %d %d\n", s->mb_x, s->mb_y); | 3200 av_log(s->avctx, AV_LOG_ERROR, "marker missing after first P partition at %d %d\n", s->mb_x, s->mb_y); |
3201 return -1; | 3201 return -1; |
3202 } | 3202 } |
3203 } | 3203 } |
3204 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, part_a_end); | 3204 ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, part_a_end); |
3205 | 3205 |
3274 if (!IS_SKIP(mb_type)) { | 3274 if (!IS_SKIP(mb_type)) { |
3275 int i; | 3275 int i; |
3276 /* decode each block */ | 3276 /* decode each block */ |
3277 for (i = 0; i < 6; i++) { | 3277 for (i = 0; i < 6; i++) { |
3278 if(mpeg4_decode_block(s, block[i], i, cbp&32, s->mb_intra, s->rvlc) < 0){ | 3278 if(mpeg4_decode_block(s, block[i], i, cbp&32, s->mb_intra, s->rvlc) < 0){ |
3279 fprintf(stderr, "texture corrupted at %d %d %d\n", s->mb_x, s->mb_y, s->mb_intra); | 3279 av_log(s->avctx, AV_LOG_ERROR, "texture corrupted at %d %d %d\n", s->mb_x, s->mb_y, s->mb_intra); |
3280 return -1; | 3280 return -1; |
3281 } | 3281 } |
3282 cbp+=cbp; | 3282 cbp+=cbp; |
3283 } | 3283 } |
3284 } | 3284 } |
3335 goto end; | 3335 goto end; |
3336 } | 3336 } |
3337 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); | 3337 cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2); |
3338 //fprintf(stderr, "\tCBPC: %d", cbpc); | 3338 //fprintf(stderr, "\tCBPC: %d", cbpc); |
3339 if (cbpc < 0){ | 3339 if (cbpc < 0){ |
3340 fprintf(stderr, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y); | 3340 av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y); |
3341 return -1; | 3341 return -1; |
3342 } | 3342 } |
3343 }while(cbpc == 20); | 3343 }while(cbpc == 20); |
3344 | 3344 |
3345 dquant = cbpc & 8; | 3345 dquant = cbpc & 8; |
3482 cbp=0; | 3482 cbp=0; |
3483 }else{ | 3483 }else{ |
3484 modb2= get_bits1(&s->gb); | 3484 modb2= get_bits1(&s->gb); |
3485 mb_type= get_vlc2(&s->gb, mb_type_b_vlc.table, MB_TYPE_B_VLC_BITS, 1); | 3485 mb_type= get_vlc2(&s->gb, mb_type_b_vlc.table, MB_TYPE_B_VLC_BITS, 1); |
3486 if(mb_type<0){ | 3486 if(mb_type<0){ |
3487 printf("illegal MB_type\n"); | 3487 av_log(s->avctx, AV_LOG_ERROR, "illegal MB_type\n"); |
3488 return -1; | 3488 return -1; |
3489 } | 3489 } |
3490 mb_type= mb_type_b_map[ mb_type ]; | 3490 mb_type= mb_type_b_map[ mb_type ]; |
3491 if(modb2) cbp= 0; | 3491 if(modb2) cbp= 0; |
3492 else cbp= get_bits(&s->gb, 6); | 3492 else cbp= get_bits(&s->gb, 6); |
3578 s->current_picture.mb_type[xy]= mb_type; | 3578 s->current_picture.mb_type[xy]= mb_type; |
3579 } else { /* I-Frame */ | 3579 } else { /* I-Frame */ |
3580 do{ | 3580 do{ |
3581 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); | 3581 cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2); |
3582 if (cbpc < 0){ | 3582 if (cbpc < 0){ |
3583 fprintf(stderr, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y); | 3583 av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y); |
3584 return -1; | 3584 return -1; |
3585 } | 3585 } |
3586 }while(cbpc == 8); | 3586 }while(cbpc == 8); |
3587 | 3587 |
3588 dquant = cbpc & 4; | 3588 dquant = cbpc & 4; |
3600 }else | 3600 }else |
3601 s->ac_pred = 0; | 3601 s->ac_pred = 0; |
3602 | 3602 |
3603 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); | 3603 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); |
3604 if(cbpy<0){ | 3604 if(cbpy<0){ |
3605 fprintf(stderr, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y); | 3605 av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y); |
3606 return -1; | 3606 return -1; |
3607 } | 3607 } |
3608 cbp = (cbpc & 3) | (cbpy << 2); | 3608 cbp = (cbpc & 3) | (cbpy << 2); |
3609 if (dquant) { | 3609 if (dquant) { |
3610 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); | 3610 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); |
3769 level = get_bits(&s->gb, 8); | 3769 level = get_bits(&s->gb, 8); |
3770 } | 3770 } |
3771 }else{ | 3771 }else{ |
3772 level = get_bits(&s->gb, 8); | 3772 level = get_bits(&s->gb, 8); |
3773 if((level&0x7F) == 0){ | 3773 if((level&0x7F) == 0){ |
3774 fprintf(stderr, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y); | 3774 av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y); |
3775 return -1; | 3775 return -1; |
3776 } | 3776 } |
3777 if (level == 255) | 3777 if (level == 255) |
3778 level = 128; | 3778 level = 128; |
3779 } | 3779 } |
3790 } | 3790 } |
3791 | 3791 |
3792 for(;;) { | 3792 for(;;) { |
3793 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2); | 3793 code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2); |
3794 if (code < 0){ | 3794 if (code < 0){ |
3795 fprintf(stderr, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y); | 3795 av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y); |
3796 return -1; | 3796 return -1; |
3797 } | 3797 } |
3798 if (code == rl->n) { | 3798 if (code == rl->n) { |
3799 /* escape */ | 3799 /* escape */ |
3800 if (s->h263_flv > 1) { | 3800 if (s->h263_flv > 1) { |
3827 if (get_bits1(&s->gb)) | 3827 if (get_bits1(&s->gb)) |
3828 level = -level; | 3828 level = -level; |
3829 } | 3829 } |
3830 i += run; | 3830 i += run; |
3831 if (i >= 64){ | 3831 if (i >= 64){ |
3832 fprintf(stderr, "run overflow at %dx%d\n", s->mb_x, s->mb_y); | 3832 av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d\n", s->mb_x, s->mb_y); |
3833 return -1; | 3833 return -1; |
3834 } | 3834 } |
3835 j = scan_table[i]; | 3835 j = scan_table[i]; |
3836 block[j] = level; | 3836 block[j] = level; |
3837 if (last) | 3837 if (last) |
3861 if (n < 4) | 3861 if (n < 4) |
3862 code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1); | 3862 code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1); |
3863 else | 3863 else |
3864 code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1); | 3864 code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1); |
3865 if (code < 0 || code > 9 /* && s->nbit<9 */){ | 3865 if (code < 0 || code > 9 /* && s->nbit<9 */){ |
3866 fprintf(stderr, "illegal dc vlc\n"); | 3866 av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n"); |
3867 return -1; | 3867 return -1; |
3868 } | 3868 } |
3869 if (code == 0) { | 3869 if (code == 0) { |
3870 level = 0; | 3870 level = 0; |
3871 } else { | 3871 } else { |
3883 } | 3883 } |
3884 | 3884 |
3885 if (code > 8){ | 3885 if (code > 8){ |
3886 if(get_bits1(&s->gb)==0){ /* marker */ | 3886 if(get_bits1(&s->gb)==0){ /* marker */ |
3887 if(s->error_resilience>=2){ | 3887 if(s->error_resilience>=2){ |
3888 fprintf(stderr, "dc marker bit missing\n"); | 3888 av_log(s->avctx, AV_LOG_ERROR, "dc marker bit missing\n"); |
3889 return -1; | 3889 return -1; |
3890 } | 3890 } |
3891 } | 3891 } |
3892 } | 3892 } |
3893 } | 3893 } |
3894 pred = ff_mpeg4_pred_dc(s, n, &dc_val, dir_ptr); | 3894 pred = ff_mpeg4_pred_dc(s, n, &dc_val, dir_ptr); |
3895 level += pred; | 3895 level += pred; |
3896 if (level < 0){ | 3896 if (level < 0){ |
3897 if(s->error_resilience>=3){ | 3897 if(s->error_resilience>=3){ |
3898 fprintf(stderr, "dc<0 at %dx%d\n", s->mb_x, s->mb_y); | 3898 av_log(s->avctx, AV_LOG_ERROR, "dc<0 at %dx%d\n", s->mb_x, s->mb_y); |
3899 return -1; | 3899 return -1; |
3900 } | 3900 } |
3901 level = 0; | 3901 level = 0; |
3902 } | 3902 } |
3903 if (n < 4) { | 3903 if (n < 4) { |
3908 if(IS_3IV1) | 3908 if(IS_3IV1) |
3909 *dc_val = level * 8; | 3909 *dc_val = level * 8; |
3910 | 3910 |
3911 if(s->error_resilience>=3){ | 3911 if(s->error_resilience>=3){ |
3912 if(*dc_val > 2048 + s->y_dc_scale + s->c_dc_scale){ | 3912 if(*dc_val > 2048 + s->y_dc_scale + s->c_dc_scale){ |
3913 fprintf(stderr, "dc overflow at %dx%d\n", s->mb_x, s->mb_y); | 3913 av_log(s->avctx, AV_LOG_ERROR, "dc overflow at %dx%d\n", s->mb_x, s->mb_y); |
3914 return -1; | 3914 return -1; |
3915 } | 3915 } |
3916 } | 3916 } |
3917 return level; | 3917 return level; |
3918 } | 3918 } |
4007 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2); | 4007 GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2); |
4008 if (level==0) { | 4008 if (level==0) { |
4009 /* escape */ | 4009 /* escape */ |
4010 if(rvlc){ | 4010 if(rvlc){ |
4011 if(SHOW_UBITS(re, &s->gb, 1)==0){ | 4011 if(SHOW_UBITS(re, &s->gb, 1)==0){ |
4012 fprintf(stderr, "1. marker bit missing in rvlc esc\n"); | 4012 av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in rvlc esc\n"); |
4013 return -1; | 4013 return -1; |
4014 }; SKIP_CACHE(re, &s->gb, 1); | 4014 }; SKIP_CACHE(re, &s->gb, 1); |
4015 | 4015 |
4016 last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); | 4016 last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1); |
4017 run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6); | 4017 run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6); |
4018 SKIP_COUNTER(re, &s->gb, 1+1+6); | 4018 SKIP_COUNTER(re, &s->gb, 1+1+6); |
4019 UPDATE_CACHE(re, &s->gb); | 4019 UPDATE_CACHE(re, &s->gb); |
4020 | 4020 |
4021 if(SHOW_UBITS(re, &s->gb, 1)==0){ | 4021 if(SHOW_UBITS(re, &s->gb, 1)==0){ |
4022 fprintf(stderr, "2. marker bit missing in rvlc esc\n"); | 4022 av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in rvlc esc\n"); |
4023 return -1; | 4023 return -1; |
4024 }; SKIP_CACHE(re, &s->gb, 1); | 4024 }; SKIP_CACHE(re, &s->gb, 1); |
4025 | 4025 |
4026 level= SHOW_UBITS(re, &s->gb, 11); SKIP_CACHE(re, &s->gb, 11); | 4026 level= SHOW_UBITS(re, &s->gb, 11); SKIP_CACHE(re, &s->gb, 11); |
4027 | 4027 |
4028 if(SHOW_UBITS(re, &s->gb, 5)!=0x10){ | 4028 if(SHOW_UBITS(re, &s->gb, 5)!=0x10){ |
4029 fprintf(stderr, "reverse esc missing\n"); | 4029 av_log(s->avctx, AV_LOG_ERROR, "reverse esc missing\n"); |
4030 return -1; | 4030 return -1; |
4031 }; SKIP_CACHE(re, &s->gb, 5); | 4031 }; SKIP_CACHE(re, &s->gb, 5); |
4032 | 4032 |
4033 level= level * qmul + qadd; | 4033 level= level * qmul + qadd; |
4034 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1); | 4034 level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1); |
4054 | 4054 |
4055 if(IS_3IV1){ | 4055 if(IS_3IV1){ |
4056 level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12); | 4056 level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12); |
4057 }else{ | 4057 }else{ |
4058 if(SHOW_UBITS(re, &s->gb, 1)==0){ | 4058 if(SHOW_UBITS(re, &s->gb, 1)==0){ |
4059 fprintf(stderr, "1. marker bit missing in 3. esc\n"); | 4059 av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in 3. esc\n"); |
4060 return -1; | 4060 return -1; |
4061 }; SKIP_CACHE(re, &s->gb, 1); | 4061 }; SKIP_CACHE(re, &s->gb, 1); |
4062 | 4062 |
4063 level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12); | 4063 level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12); |
4064 | 4064 |
4065 if(SHOW_UBITS(re, &s->gb, 1)==0){ | 4065 if(SHOW_UBITS(re, &s->gb, 1)==0){ |
4066 fprintf(stderr, "2. marker bit missing in 3. esc\n"); | 4066 av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n"); |
4067 return -1; | 4067 return -1; |
4068 }; LAST_SKIP_CACHE(re, &s->gb, 1); | 4068 }; LAST_SKIP_CACHE(re, &s->gb, 1); |
4069 | 4069 |
4070 SKIP_COUNTER(re, &s->gb, 1+12+1); | 4070 SKIP_COUNTER(re, &s->gb, 1+12+1); |
4071 } | 4071 } |
4072 | 4072 |
4073 if(level*s->qscale>1024 || level*s->qscale<-1024){ | 4073 if(level*s->qscale>1024 || level*s->qscale<-1024){ |
4074 fprintf(stderr, "|level| overflow in 3. esc, qp=%d\n", s->qscale); | 4074 av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale); |
4075 return -1; | 4075 return -1; |
4076 } | 4076 } |
4077 #if 0 | 4077 #if 0 |
4078 if(s->error_resilience >= FF_ER_COMPLIANT){ | 4078 if(s->error_resilience >= FF_ER_COMPLIANT){ |
4079 const int abs_level= ABS(level); | 4079 const int abs_level= ABS(level); |
4080 if(abs_level<=MAX_LEVEL && run<=MAX_RUN){ | 4080 if(abs_level<=MAX_LEVEL && run<=MAX_RUN){ |
4081 const int run1= run - rl->max_run[last][abs_level] - 1; | 4081 const int run1= run - rl->max_run[last][abs_level] - 1; |
4082 if(abs_level <= rl->max_level[last][run]){ | 4082 if(abs_level <= rl->max_level[last][run]){ |
4083 fprintf(stderr, "illegal 3. esc, vlc encoding possible\n"); | 4083 av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n"); |
4084 return -1; | 4084 return -1; |
4085 } | 4085 } |
4086 if(s->error_resilience > FF_ER_COMPLIANT){ | 4086 if(s->error_resilience > FF_ER_COMPLIANT){ |
4087 if(abs_level <= rl->max_level[last][run]*2){ | 4087 if(abs_level <= rl->max_level[last][run]*2){ |
4088 fprintf(stderr, "illegal 3. esc, esc 1 encoding possible\n"); | 4088 fprintf(stderr, "illegal 3. esc, esc 1 encoding possible\n"); |
4135 LAST_SKIP_BITS(re, &s->gb, 1); | 4135 LAST_SKIP_BITS(re, &s->gb, 1); |
4136 } | 4136 } |
4137 if (i > 62){ | 4137 if (i > 62){ |
4138 i-= 192; | 4138 i-= 192; |
4139 if(i&(~63)){ | 4139 if(i&(~63)){ |
4140 fprintf(stderr, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y); | 4140 av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y); |
4141 return -1; | 4141 return -1; |
4142 } | 4142 } |
4143 | 4143 |
4144 block[scan_table[i]] = level; | 4144 block[scan_table[i]] = level; |
4145 break; | 4145 break; |
4188 if(startcode == 0x20) | 4188 if(startcode == 0x20) |
4189 break; | 4189 break; |
4190 } | 4190 } |
4191 | 4191 |
4192 if (startcode != 0x20) { | 4192 if (startcode != 0x20) { |
4193 fprintf(stderr, "Bad picture start code\n"); | 4193 av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n"); |
4194 return -1; | 4194 return -1; |
4195 } | 4195 } |
4196 /* temporal reference */ | 4196 /* temporal reference */ |
4197 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */ | 4197 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */ |
4198 | 4198 |
4199 /* PTYPE starts here */ | 4199 /* PTYPE starts here */ |
4200 if (get_bits1(&s->gb) != 1) { | 4200 if (get_bits1(&s->gb) != 1) { |
4201 /* marker */ | 4201 /* marker */ |
4202 fprintf(stderr, "Bad marker\n"); | 4202 av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n"); |
4203 return -1; | 4203 return -1; |
4204 } | 4204 } |
4205 if (get_bits1(&s->gb) != 0) { | 4205 if (get_bits1(&s->gb) != 0) { |
4206 fprintf(stderr, "Bad H263 id\n"); | 4206 av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n"); |
4207 return -1; /* h263 id */ | 4207 return -1; /* h263 id */ |
4208 } | 4208 } |
4209 skip_bits1(&s->gb); /* split screen off */ | 4209 skip_bits1(&s->gb); /* split screen off */ |
4210 skip_bits1(&s->gb); /* camera off */ | 4210 skip_bits1(&s->gb); /* camera off */ |
4211 skip_bits1(&s->gb); /* freeze picture release off */ | 4211 skip_bits1(&s->gb); /* freeze picture release off */ |
4233 | 4233 |
4234 s->unrestricted_mv = get_bits1(&s->gb); | 4234 s->unrestricted_mv = get_bits1(&s->gb); |
4235 s->h263_long_vectors = s->unrestricted_mv; | 4235 s->h263_long_vectors = s->unrestricted_mv; |
4236 | 4236 |
4237 if (get_bits1(&s->gb) != 0) { | 4237 if (get_bits1(&s->gb) != 0) { |
4238 fprintf(stderr, "H263 SAC not supported\n"); | 4238 av_log(s->avctx, AV_LOG_ERROR, "H263 SAC not supported\n"); |
4239 return -1; /* SAC: off */ | 4239 return -1; /* SAC: off */ |
4240 } | 4240 } |
4241 if (get_bits1(&s->gb) != 0) { | 4241 if (get_bits1(&s->gb) != 0) { |
4242 s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */ | 4242 s->mv_type = MV_TYPE_8X8; /* Advanced prediction mode */ |
4243 } | 4243 } |
4244 | 4244 |
4245 if (get_bits1(&s->gb) != 0) { | 4245 if (get_bits1(&s->gb) != 0) { |
4246 fprintf(stderr, "H263 PB frame not supported\n"); | 4246 av_log(s->avctx, AV_LOG_ERROR, "H263 PB frame not supported\n"); |
4247 return -1; /* not PB frame */ | 4247 return -1; /* not PB frame */ |
4248 } | 4248 } |
4249 s->qscale = get_bits(&s->gb, 5); | 4249 s->qscale = get_bits(&s->gb, 5); |
4250 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ | 4250 skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */ |
4251 | 4251 |
4273 if (get_bits1(&s->gb) != 0) { /* Advanced Intra Coding (AIC) */ | 4273 if (get_bits1(&s->gb) != 0) { /* Advanced Intra Coding (AIC) */ |
4274 s->h263_aic = 1; | 4274 s->h263_aic = 1; |
4275 } | 4275 } |
4276 | 4276 |
4277 if (get_bits1(&s->gb) != 0) { | 4277 if (get_bits1(&s->gb) != 0) { |
4278 fprintf(stderr, "Deblocking Filter not supported\n"); | 4278 av_log(s->avctx, AV_LOG_ERROR, "Deblocking Filter not supported\n"); |
4279 } | 4279 } |
4280 if (get_bits1(&s->gb) != 0) { | 4280 if (get_bits1(&s->gb) != 0) { |
4281 fprintf(stderr, "Slice Structured not supported\n"); | 4281 av_log(s->avctx, AV_LOG_ERROR, "Slice Structured not supported\n"); |
4282 } | 4282 } |
4283 if (get_bits1(&s->gb) != 0) { | 4283 if (get_bits1(&s->gb) != 0) { |
4284 fprintf(stderr, "Reference Picture Selection not supported\n"); | 4284 av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n"); |
4285 } | 4285 } |
4286 if (get_bits1(&s->gb) != 0) { | 4286 if (get_bits1(&s->gb) != 0) { |
4287 fprintf(stderr, "Independent Segment Decoding not supported\n"); | 4287 av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n"); |
4288 } | 4288 } |
4289 if (get_bits1(&s->gb) != 0) { | 4289 if (get_bits1(&s->gb) != 0) { |
4290 fprintf(stderr, "Alternative Inter VLC not supported\n"); | 4290 av_log(s->avctx, AV_LOG_ERROR, "Alternative Inter VLC not supported\n"); |
4291 } | 4291 } |
4292 if (get_bits1(&s->gb) != 0) { | 4292 if (get_bits1(&s->gb) != 0) { |
4293 fprintf(stderr, "Modified Quantization not supported\n"); | 4293 av_log(s->avctx, AV_LOG_ERROR, "Modified Quantization not supported\n"); |
4294 } | 4294 } |
4295 | 4295 |
4296 skip_bits(&s->gb, 1); /* Prevent start code emulation */ | 4296 skip_bits(&s->gb, 1); /* Prevent start code emulation */ |
4297 | 4297 |
4298 skip_bits(&s->gb, 3); /* Reserved */ | 4298 skip_bits(&s->gb, 3); /* Reserved */ |
4299 } else if (ufep != 0) { | 4299 } else if (ufep != 0) { |
4300 fprintf(stderr, "Bad UFEP type (%d)\n", ufep); | 4300 av_log(s->avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep); |
4301 return -1; | 4301 return -1; |
4302 } | 4302 } |
4303 | 4303 |
4304 /* MPPTYPE */ | 4304 /* MPPTYPE */ |
4305 s->pict_type = get_bits(&s->gb, 3) + I_TYPE; | 4305 s->pict_type = get_bits(&s->gb, 3) + I_TYPE; |
4369 s->y_dc_scale_table= | 4369 s->y_dc_scale_table= |
4370 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; | 4370 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; |
4371 } | 4371 } |
4372 | 4372 |
4373 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ | 4373 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ |
4374 printf("qp:%d %c size:%d rnd:%d %s %s %s %s\n", | 4374 av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d %s %s %s %s\n", |
4375 s->qscale, av_get_pict_type_char(s->pict_type), | 4375 s->qscale, av_get_pict_type_char(s->pict_type), |
4376 s->gb.size_in_bits, 1-s->no_rounding, | 4376 s->gb.size_in_bits, 1-s->no_rounding, |
4377 s->mv_type == MV_TYPE_8X8 ? "ADV" : "", | 4377 s->mv_type == MV_TYPE_8X8 ? "ADV" : "", |
4378 s->umvplus ? "UMV" : "", | 4378 s->umvplus ? "UMV" : "", |
4379 s->h263_long_vectors ? "LONG" : "", | 4379 s->h263_long_vectors ? "LONG" : "", |
4381 ); | 4381 ); |
4382 } | 4382 } |
4383 #if 1 | 4383 #if 1 |
4384 if (s->pict_type == I_TYPE && s->avctx->codec_tag == ff_get_fourcc("ZYGO")){ | 4384 if (s->pict_type == I_TYPE && s->avctx->codec_tag == ff_get_fourcc("ZYGO")){ |
4385 int i,j; | 4385 int i,j; |
4386 for(i=0; i<85; i++) printf("%d", get_bits1(&s->gb)); | 4386 for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb)); |
4387 printf("\n"); | 4387 av_log(s->avctx, AV_LOG_DEBUG, "\n"); |
4388 for(i=0; i<13; i++){ | 4388 for(i=0; i<13; i++){ |
4389 for(j=0; j<3; j++){ | 4389 for(j=0; j<3; j++){ |
4390 int v= get_bits(&s->gb, 8); | 4390 int v= get_bits(&s->gb, 8); |
4391 v |= get_sbits(&s->gb, 8)<<8; | 4391 v |= get_sbits(&s->gb, 8)<<8; |
4392 printf(" %5d", v); | 4392 av_log(s->avctx, AV_LOG_DEBUG, " %5d", v); |
4393 } | 4393 } |
4394 printf("\n"); | 4394 av_log(s->avctx, AV_LOG_DEBUG, "\n"); |
4395 } | 4395 } |
4396 for(i=0; i<50; i++) printf("%d", get_bits1(&s->gb)); | 4396 for(i=0; i<50; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb)); |
4397 } | 4397 } |
4398 #endif | 4398 #endif |
4399 | 4399 |
4400 return 0; | 4400 return 0; |
4401 } | 4401 } |
4647 } | 4647 } |
4648 | 4648 |
4649 if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */ | 4649 if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */ |
4650 int chroma_format= get_bits(gb, 2); | 4650 int chroma_format= get_bits(gb, 2); |
4651 if(chroma_format!=1){ | 4651 if(chroma_format!=1){ |
4652 printf("illegal chroma format\n"); | 4652 av_log(s->avctx, AV_LOG_ERROR, "illegal chroma format\n"); |
4653 } | 4653 } |
4654 s->low_delay= get_bits1(gb); | 4654 s->low_delay= get_bits1(gb); |
4655 if(get_bits1(gb)){ /* vbv parameters */ | 4655 if(get_bits1(gb)){ /* vbv parameters */ |
4656 get_bits(gb, 15); /* first_half_bitrate */ | 4656 get_bits(gb, 15); /* first_half_bitrate */ |
4657 skip_bits1(gb); /* marker */ | 4657 skip_bits1(gb); /* marker */ |
4670 if(s->picture_number==0) | 4670 if(s->picture_number==0) |
4671 s->low_delay=0; | 4671 s->low_delay=0; |
4672 } | 4672 } |
4673 | 4673 |
4674 s->shape = get_bits(gb, 2); /* vol shape */ | 4674 s->shape = get_bits(gb, 2); /* vol shape */ |
4675 if(s->shape != RECT_SHAPE) printf("only rectangular vol supported\n"); | 4675 if(s->shape != RECT_SHAPE) av_log(s->avctx, AV_LOG_ERROR, "only rectangular vol supported\n"); |
4676 if(s->shape == GRAY_SHAPE && vo_ver_id != 1){ | 4676 if(s->shape == GRAY_SHAPE && vo_ver_id != 1){ |
4677 printf("Gray shape not supported\n"); | 4677 av_log(s->avctx, AV_LOG_ERROR, "Gray shape not supported\n"); |
4678 skip_bits(gb, 4); //video_object_layer_shape_extension | 4678 skip_bits(gb, 4); //video_object_layer_shape_extension |
4679 } | 4679 } |
4680 | 4680 |
4681 check_marker(gb, "before time_increment_resolution"); | 4681 check_marker(gb, "before time_increment_resolution"); |
4682 | 4682 |
4706 } | 4706 } |
4707 } | 4707 } |
4708 | 4708 |
4709 s->progressive_sequence= get_bits1(gb)^1; | 4709 s->progressive_sequence= get_bits1(gb)^1; |
4710 if(!get_bits1(gb) && (s->avctx->debug & FF_DEBUG_PICT_INFO)) | 4710 if(!get_bits1(gb) && (s->avctx->debug & FF_DEBUG_PICT_INFO)) |
4711 printf("OBMC not supported (very likely buggy encoder)\n"); /* OBMC Disable */ | 4711 av_log(s->avctx, AV_LOG_ERROR, "OBMC not supported (very likely buggy encoder)\n"); /* OBMC Disable */ |
4712 if (vo_ver_id == 1) { | 4712 if (vo_ver_id == 1) { |
4713 s->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */ | 4713 s->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */ |
4714 } else { | 4714 } else { |
4715 s->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */ | 4715 s->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */ |
4716 } | 4716 } |
4717 if(s->vol_sprite_usage==STATIC_SPRITE) printf("Static Sprites not supported\n"); | 4717 if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "Static Sprites not supported\n"); |
4718 if(s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE){ | 4718 if(s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE){ |
4719 if(s->vol_sprite_usage==STATIC_SPRITE){ | 4719 if(s->vol_sprite_usage==STATIC_SPRITE){ |
4720 s->sprite_width = get_bits(gb, 13); | 4720 s->sprite_width = get_bits(gb, 13); |
4721 skip_bits1(gb); /* marker */ | 4721 skip_bits1(gb); /* marker */ |
4722 s->sprite_height= get_bits(gb, 13); | 4722 s->sprite_height= get_bits(gb, 13); |
4734 } | 4734 } |
4735 // FIXME sadct disable bit if verid!=1 && shape not rect | 4735 // FIXME sadct disable bit if verid!=1 && shape not rect |
4736 | 4736 |
4737 if (get_bits1(gb) == 1) { /* not_8_bit */ | 4737 if (get_bits1(gb) == 1) { /* not_8_bit */ |
4738 s->quant_precision = get_bits(gb, 4); /* quant_precision */ | 4738 s->quant_precision = get_bits(gb, 4); /* quant_precision */ |
4739 if(get_bits(gb, 4)!=8) printf("N-bit not supported\n"); /* bits_per_pixel */ | 4739 if(get_bits(gb, 4)!=8) av_log(s->avctx, AV_LOG_ERROR, "N-bit not supported\n"); /* bits_per_pixel */ |
4740 if(s->quant_precision!=5) printf("quant precission %d\n", s->quant_precision); | 4740 if(s->quant_precision!=5) av_log(s->avctx, AV_LOG_ERROR, "quant precission %d\n", s->quant_precision); |
4741 } else { | 4741 } else { |
4742 s->quant_precision = 5; | 4742 s->quant_precision = 5; |
4743 } | 4743 } |
4744 | 4744 |
4745 // FIXME a bunch of grayscale shape things | 4745 // FIXME a bunch of grayscale shape things |
4808 | 4808 |
4809 if(vo_ver_id != 1) | 4809 if(vo_ver_id != 1) |
4810 s->quarter_sample= get_bits1(gb); | 4810 s->quarter_sample= get_bits1(gb); |
4811 else s->quarter_sample=0; | 4811 else s->quarter_sample=0; |
4812 | 4812 |
4813 if(!get_bits1(gb)) printf("Complexity estimation not supported\n"); | 4813 if(!get_bits1(gb)) av_log(s->avctx, AV_LOG_ERROR, "Complexity estimation not supported\n"); |
4814 | 4814 |
4815 s->resync_marker= !get_bits1(gb); /* resync_marker_disabled */ | 4815 s->resync_marker= !get_bits1(gb); /* resync_marker_disabled */ |
4816 | 4816 |
4817 s->data_partitioning= get_bits1(gb); | 4817 s->data_partitioning= get_bits1(gb); |
4818 if(s->data_partitioning){ | 4818 if(s->data_partitioning){ |
4820 } | 4820 } |
4821 | 4821 |
4822 if(vo_ver_id != 1) { | 4822 if(vo_ver_id != 1) { |
4823 s->new_pred= get_bits1(gb); | 4823 s->new_pred= get_bits1(gb); |
4824 if(s->new_pred){ | 4824 if(s->new_pred){ |
4825 printf("new pred not supported\n"); | 4825 av_log(s->avctx, AV_LOG_ERROR, "new pred not supported\n"); |
4826 skip_bits(gb, 2); /* requested upstream message type */ | 4826 skip_bits(gb, 2); /* requested upstream message type */ |
4827 skip_bits1(gb); /* newpred segment type */ | 4827 skip_bits1(gb); /* newpred segment type */ |
4828 } | 4828 } |
4829 s->reduced_res_vop= get_bits1(gb); | 4829 s->reduced_res_vop= get_bits1(gb); |
4830 if(s->reduced_res_vop) printf("reduced resolution VOP not supported\n"); | 4830 if(s->reduced_res_vop) av_log(s->avctx, AV_LOG_ERROR, "reduced resolution VOP not supported\n"); |
4831 } | 4831 } |
4832 else{ | 4832 else{ |
4833 s->new_pred=0; | 4833 s->new_pred=0; |
4834 s->reduced_res_vop= 0; | 4834 s->reduced_res_vop= 0; |
4835 } | 4835 } |
4860 // fprintf(stderr, "illegal scalability header (VERY broken encoder), trying to workaround\n"); | 4860 // fprintf(stderr, "illegal scalability header (VERY broken encoder), trying to workaround\n"); |
4861 s->scalability=0; | 4861 s->scalability=0; |
4862 | 4862 |
4863 *gb= bak; | 4863 *gb= bak; |
4864 }else | 4864 }else |
4865 printf("scalability not supported\n"); | 4865 av_log(s->avctx, AV_LOG_ERROR, "scalability not supported\n"); |
4866 | 4866 |
4867 // bin shape stuff FIXME | 4867 // bin shape stuff FIXME |
4868 } | 4868 } |
4869 } | 4869 } |
4870 return 0; | 4870 return 0; |
4927 static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){ | 4927 static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){ |
4928 int time_incr, time_increment; | 4928 int time_incr, time_increment; |
4929 | 4929 |
4930 s->pict_type = get_bits(gb, 2) + I_TYPE; /* pict type: I = 0 , P = 1 */ | 4930 s->pict_type = get_bits(gb, 2) + I_TYPE; /* pict type: I = 0 , P = 1 */ |
4931 if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0 && !(s->flags & CODEC_FLAG_LOW_DELAY)){ | 4931 if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0 && !(s->flags & CODEC_FLAG_LOW_DELAY)){ |
4932 printf("low_delay flag set, but shouldnt, clearing it\n"); | 4932 av_log(s->avctx, AV_LOG_ERROR, "low_delay flag set, but shouldnt, clearing it\n"); |
4933 s->low_delay=0; | 4933 s->low_delay=0; |
4934 } | 4934 } |
4935 | 4935 |
4936 s->partitioned_frame= s->data_partitioning && s->pict_type!=B_TYPE; | 4936 s->partitioned_frame= s->data_partitioning && s->pict_type!=B_TYPE; |
4937 if(s->partitioned_frame) | 4937 if(s->partitioned_frame) |
4948 time_incr++; | 4948 time_incr++; |
4949 | 4949 |
4950 check_marker(gb, "before time_increment"); | 4950 check_marker(gb, "before time_increment"); |
4951 | 4951 |
4952 if(s->time_increment_bits==0){ | 4952 if(s->time_increment_bits==0){ |
4953 printf("hmm, seems the headers arnt complete, trying to guess time_increment_bits\n"); | 4953 av_log(s->avctx, AV_LOG_ERROR, "hmm, seems the headers arnt complete, trying to guess time_increment_bits\n"); |
4954 | 4954 |
4955 for(s->time_increment_bits=1 ;s->time_increment_bits<16; s->time_increment_bits++){ | 4955 for(s->time_increment_bits=1 ;s->time_increment_bits<16; s->time_increment_bits++){ |
4956 if(show_bits(gb, s->time_increment_bits+1)&1) break; | 4956 if(show_bits(gb, s->time_increment_bits+1)&1) break; |
4957 } | 4957 } |
4958 | 4958 |
4959 printf("my guess is %d bits ;)\n",s->time_increment_bits); | 4959 av_log(s->avctx, AV_LOG_ERROR, "my guess is %d bits ;)\n",s->time_increment_bits); |
4960 } | 4960 } |
4961 | 4961 |
4962 if(IS_3IV1) time_increment= get_bits1(gb); //FIXME investigate further | 4962 if(IS_3IV1) time_increment= get_bits1(gb); //FIXME investigate further |
4963 else time_increment= get_bits(gb, s->time_increment_bits); | 4963 else time_increment= get_bits(gb, s->time_increment_bits); |
4964 | 4964 |
4994 - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2; | 4994 - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2; |
4995 } | 4995 } |
4996 | 4996 |
4997 s->current_picture_ptr->pts= s->time*1000LL*1000LL / s->time_increment_resolution; | 4997 s->current_picture_ptr->pts= s->time*1000LL*1000LL / s->time_increment_resolution; |
4998 if(s->avctx->debug&FF_DEBUG_PTS) | 4998 if(s->avctx->debug&FF_DEBUG_PTS) |
4999 printf("MPEG4 PTS: %f\n", s->current_picture_ptr->pts/(1000.0*1000.0)); | 4999 av_log(s->avctx, AV_LOG_DEBUG, "MPEG4 PTS: %f\n", s->current_picture_ptr->pts/(1000.0*1000.0)); |
5000 | 5000 |
5001 check_marker(gb, "before vop_coded"); | 5001 check_marker(gb, "before vop_coded"); |
5002 | 5002 |
5003 /* vop coded */ | 5003 /* vop coded */ |
5004 if (get_bits1(gb) != 1){ | 5004 if (get_bits1(gb) != 1){ |
5005 printf("vop not coded\n"); | 5005 av_log(s->avctx, AV_LOG_ERROR, "vop not coded\n"); |
5006 return FRAME_SKIPED; | 5006 return FRAME_SKIPED; |
5007 } | 5007 } |
5008 //printf("time %d %d %d || %Ld %Ld %Ld\n", s->time_increment_bits, s->time_increment_resolution, s->time_base, | 5008 //printf("time %d %d %d || %Ld %Ld %Ld\n", s->time_increment_bits, s->time_increment_resolution, s->time_base, |
5009 //s->time, s->last_non_b_time, s->last_non_b_time - s->pp_time); | 5009 //s->time, s->last_non_b_time, s->last_non_b_time - s->pp_time); |
5010 if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == P_TYPE | 5010 if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == P_TYPE |
5057 ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan); | 5057 ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan); |
5058 } | 5058 } |
5059 | 5059 |
5060 if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ | 5060 if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ |
5061 mpeg4_decode_sprite_trajectory(s); | 5061 mpeg4_decode_sprite_trajectory(s); |
5062 if(s->sprite_brightness_change) printf("sprite_brightness_change not supported\n"); | 5062 if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n"); |
5063 if(s->vol_sprite_usage==STATIC_SPRITE) printf("static sprite not supported\n"); | 5063 if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n"); |
5064 } | 5064 } |
5065 | 5065 |
5066 if (s->shape != BIN_ONLY_SHAPE) { | 5066 if (s->shape != BIN_ONLY_SHAPE) { |
5067 s->qscale = get_bits(gb, s->quant_precision); | 5067 s->qscale = get_bits(gb, s->quant_precision); |
5068 if(s->qscale==0){ | 5068 if(s->qscale==0){ |
5069 printf("Error, header damaged or not MPEG4 header (qscale=0)\n"); | 5069 av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (qscale=0)\n"); |
5070 return -1; // makes no sense to continue, as there is nothing left from the image then | 5070 return -1; // makes no sense to continue, as there is nothing left from the image then |
5071 } | 5071 } |
5072 | 5072 |
5073 if (s->pict_type != I_TYPE) { | 5073 if (s->pict_type != I_TYPE) { |
5074 s->f_code = get_bits(gb, 3); /* fcode_for */ | 5074 s->f_code = get_bits(gb, 3); /* fcode_for */ |
5075 if(s->f_code==0){ | 5075 if(s->f_code==0){ |
5076 printf("Error, header damaged or not MPEG4 header (f_code=0)\n"); | 5076 av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (f_code=0)\n"); |
5077 return -1; // makes no sense to continue, as the MV decoding will break very quickly | 5077 return -1; // makes no sense to continue, as the MV decoding will break very quickly |
5078 } | 5078 } |
5079 }else | 5079 }else |
5080 s->f_code=1; | 5080 s->f_code=1; |
5081 | 5081 |
5083 s->b_code = get_bits(gb, 3); | 5083 s->b_code = get_bits(gb, 3); |
5084 }else | 5084 }else |
5085 s->b_code=1; | 5085 s->b_code=1; |
5086 | 5086 |
5087 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ | 5087 if(s->avctx->debug&FF_DEBUG_PICT_INFO){ |
5088 printf("qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d\n", | 5088 av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d\n", |
5089 s->qscale, s->f_code, s->b_code, | 5089 s->qscale, s->f_code, s->b_code, |
5090 s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")), | 5090 s->pict_type == I_TYPE ? "I" : (s->pict_type == P_TYPE ? "P" : (s->pict_type == B_TYPE ? "B" : "S")), |
5091 gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first, | 5091 gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first, |
5092 s->quarter_sample ? "q" : "h", s->data_partitioning, s->resync_marker, s->num_sprite_warping_points, | 5092 s->quarter_sample ? "q" : "h", s->data_partitioning, s->resync_marker, s->num_sprite_warping_points, |
5093 s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold); | 5093 s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold); |
5099 } | 5099 } |
5100 }else{ | 5100 }else{ |
5101 if(s->enhancement_type){ | 5101 if(s->enhancement_type){ |
5102 int load_backward_shape= get_bits1(gb); | 5102 int load_backward_shape= get_bits1(gb); |
5103 if(load_backward_shape){ | 5103 if(load_backward_shape){ |
5104 printf("load backward shape isnt supported\n"); | 5104 av_log(s->avctx, AV_LOG_ERROR, "load backward shape isnt supported\n"); |
5105 } | 5105 } |
5106 } | 5106 } |
5107 skip_bits(gb, 2); //ref_select_code | 5107 skip_bits(gb, 2); //ref_select_code |
5108 } | 5108 } |
5109 } | 5109 } |
5110 /* detect buggy encoders which dont set the low_delay flag (divx4/xvid/opendivx)*/ | 5110 /* detect buggy encoders which dont set the low_delay flag (divx4/xvid/opendivx)*/ |
5111 // note we cannot detect divx5 without b-frames easyly (allthough its buggy too) | 5111 // note we cannot detect divx5 without b-frames easyly (allthough its buggy too) |
5112 if(s->vo_type==0 && s->vol_control_parameters==0 && s->divx_version==0 && s->picture_number==0){ | 5112 if(s->vo_type==0 && s->vol_control_parameters==0 && s->divx_version==0 && s->picture_number==0){ |
5113 printf("looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n"); | 5113 av_log(s->avctx, AV_LOG_ERROR, "looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n"); |
5114 s->low_delay=1; | 5114 s->low_delay=1; |
5115 } | 5115 } |
5116 | 5116 |
5117 s->picture_number++; // better than pic number==0 allways ;) | 5117 s->picture_number++; // better than pic number==0 allways ;) |
5118 | 5118 |
5143 v = get_bits(gb, 8); | 5143 v = get_bits(gb, 8); |
5144 startcode = ((startcode << 8) | v) & 0xffffffff; | 5144 startcode = ((startcode << 8) | v) & 0xffffffff; |
5145 | 5145 |
5146 if(get_bits_count(gb) >= gb->size_in_bits){ | 5146 if(get_bits_count(gb) >= gb->size_in_bits){ |
5147 if(gb->size_in_bits==8 && s->divx_version){ | 5147 if(gb->size_in_bits==8 && s->divx_version){ |
5148 printf("frame skip %d\n", gb->size_in_bits); | 5148 av_log(s->avctx, AV_LOG_ERROR, "frame skip %d\n", gb->size_in_bits); |
5149 return FRAME_SKIPED; //divx bug | 5149 return FRAME_SKIPED; //divx bug |
5150 }else | 5150 }else |
5151 return -1; //end of stream | 5151 return -1; //end of stream |
5152 } | 5152 } |
5153 | 5153 |
5154 if((startcode&0xFFFFFF00) != 0x100) | 5154 if((startcode&0xFFFFFF00) != 0x100) |
5155 continue; //no startcode | 5155 continue; //no startcode |
5156 | 5156 |
5157 if(s->avctx->debug&FF_DEBUG_STARTCODE){ | 5157 if(s->avctx->debug&FF_DEBUG_STARTCODE){ |
5158 printf("startcode: %3X ", startcode); | 5158 av_log(s->avctx, AV_LOG_DEBUG, "startcode: %3X ", startcode); |
5159 if (startcode<=0x11F) printf("Video Object Start"); | 5159 if (startcode<=0x11F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Start"); |
5160 else if(startcode<=0x12F) printf("Video Object Layer Start"); | 5160 else if(startcode<=0x12F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Layer Start"); |
5161 else if(startcode<=0x13F) printf("Reserved"); | 5161 else if(startcode<=0x13F) av_log(s->avctx, AV_LOG_DEBUG, "Reserved"); |
5162 else if(startcode<=0x15F) printf("FGS bp start"); | 5162 else if(startcode<=0x15F) av_log(s->avctx, AV_LOG_DEBUG, "FGS bp start"); |
5163 else if(startcode<=0x1AF) printf("Reserved"); | 5163 else if(startcode<=0x1AF) av_log(s->avctx, AV_LOG_DEBUG, "Reserved"); |
5164 else if(startcode==0x1B0) printf("Visual Object Seq Start"); | 5164 else if(startcode==0x1B0) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq Start"); |
5165 else if(startcode==0x1B1) printf("Visual Object Seq End"); | 5165 else if(startcode==0x1B1) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq End"); |
5166 else if(startcode==0x1B2) printf("User Data"); | 5166 else if(startcode==0x1B2) av_log(s->avctx, AV_LOG_DEBUG, "User Data"); |
5167 else if(startcode==0x1B3) printf("Group of VOP start"); | 5167 else if(startcode==0x1B3) av_log(s->avctx, AV_LOG_DEBUG, "Group of VOP start"); |
5168 else if(startcode==0x1B4) printf("Video Session Error"); | 5168 else if(startcode==0x1B4) av_log(s->avctx, AV_LOG_DEBUG, "Video Session Error"); |
5169 else if(startcode==0x1B5) printf("Visual Object Start"); | 5169 else if(startcode==0x1B5) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Start"); |
5170 else if(startcode==0x1B6) printf("Video Object Plane start"); | 5170 else if(startcode==0x1B6) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Plane start"); |
5171 else if(startcode==0x1B7) printf("slice start"); | 5171 else if(startcode==0x1B7) av_log(s->avctx, AV_LOG_DEBUG, "slice start"); |
5172 else if(startcode==0x1B8) printf("extension start"); | 5172 else if(startcode==0x1B8) av_log(s->avctx, AV_LOG_DEBUG, "extension start"); |
5173 else if(startcode==0x1B9) printf("fgs start"); | 5173 else if(startcode==0x1B9) av_log(s->avctx, AV_LOG_DEBUG, "fgs start"); |
5174 else if(startcode==0x1BA) printf("FBA Object start"); | 5174 else if(startcode==0x1BA) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object start"); |
5175 else if(startcode==0x1BB) printf("FBA Object Plane start"); | 5175 else if(startcode==0x1BB) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object Plane start"); |
5176 else if(startcode==0x1BC) printf("Mesh Object start"); | 5176 else if(startcode==0x1BC) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object start"); |
5177 else if(startcode==0x1BD) printf("Mesh Object Plane start"); | 5177 else if(startcode==0x1BD) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object Plane start"); |
5178 else if(startcode==0x1BE) printf("Still Textutre Object start"); | 5178 else if(startcode==0x1BE) av_log(s->avctx, AV_LOG_DEBUG, "Still Textutre Object start"); |
5179 else if(startcode==0x1BF) printf("Textutre Spatial Layer start"); | 5179 else if(startcode==0x1BF) av_log(s->avctx, AV_LOG_DEBUG, "Textutre Spatial Layer start"); |
5180 else if(startcode==0x1C0) printf("Textutre SNR Layer start"); | 5180 else if(startcode==0x1C0) av_log(s->avctx, AV_LOG_DEBUG, "Textutre SNR Layer start"); |
5181 else if(startcode==0x1C1) printf("Textutre Tile start"); | 5181 else if(startcode==0x1C1) av_log(s->avctx, AV_LOG_DEBUG, "Textutre Tile start"); |
5182 else if(startcode==0x1C2) printf("Textutre Shape Layer start"); | 5182 else if(startcode==0x1C2) av_log(s->avctx, AV_LOG_DEBUG, "Textutre Shape Layer start"); |
5183 else if(startcode==0x1C3) printf("stuffing start"); | 5183 else if(startcode==0x1C3) av_log(s->avctx, AV_LOG_DEBUG, "stuffing start"); |
5184 else if(startcode<=0x1C5) printf("reserved"); | 5184 else if(startcode<=0x1C5) av_log(s->avctx, AV_LOG_DEBUG, "reserved"); |
5185 else if(startcode<=0x1FF) printf("System start"); | 5185 else if(startcode<=0x1FF) av_log(s->avctx, AV_LOG_DEBUG, "System start"); |
5186 printf(" at %d\n", get_bits_count(gb)); | 5186 av_log(s->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(gb)); |
5187 } | 5187 } |
5188 | 5188 |
5189 if(startcode >= 0x120 && startcode <= 0x12F){ | 5189 if(startcode >= 0x120 && startcode <= 0x12F){ |
5190 if(decode_vol_header(s, gb) < 0) | 5190 if(decode_vol_header(s, gb) < 0) |
5191 return -1; | 5191 return -1; |
5210 { | 5210 { |
5211 int format; | 5211 int format; |
5212 | 5212 |
5213 /* picture header */ | 5213 /* picture header */ |
5214 if (get_bits_long(&s->gb, 22) != 0x20) { | 5214 if (get_bits_long(&s->gb, 22) != 0x20) { |
5215 fprintf(stderr, "Bad picture start code\n"); | 5215 av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n"); |
5216 return -1; | 5216 return -1; |
5217 } | 5217 } |
5218 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */ | 5218 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */ |
5219 | 5219 |
5220 if (get_bits1(&s->gb) != 1) { | 5220 if (get_bits1(&s->gb) != 1) { |
5221 fprintf(stderr, "Bad marker\n"); | 5221 av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n"); |
5222 return -1; /* marker */ | 5222 return -1; /* marker */ |
5223 } | 5223 } |
5224 if (get_bits1(&s->gb) != 0) { | 5224 if (get_bits1(&s->gb) != 0) { |
5225 fprintf(stderr, "Bad H263 id\n"); | 5225 av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n"); |
5226 return -1; /* h263 id */ | 5226 return -1; /* h263 id */ |
5227 } | 5227 } |
5228 skip_bits1(&s->gb); /* split screen off */ | 5228 skip_bits1(&s->gb); /* split screen off */ |
5229 skip_bits1(&s->gb); /* camera off */ | 5229 skip_bits1(&s->gb); /* camera off */ |
5230 skip_bits1(&s->gb); /* freeze picture release off */ | 5230 skip_bits1(&s->gb); /* freeze picture release off */ |
5231 | 5231 |
5232 format = get_bits(&s->gb, 3); | 5232 format = get_bits(&s->gb, 3); |
5233 if (format != 7) { | 5233 if (format != 7) { |
5234 fprintf(stderr, "Intel H263 free format not supported\n"); | 5234 av_log(s->avctx, AV_LOG_ERROR, "Intel H263 free format not supported\n"); |
5235 return -1; | 5235 return -1; |
5236 } | 5236 } |
5237 s->h263_plus = 0; | 5237 s->h263_plus = 0; |
5238 | 5238 |
5239 s->pict_type = I_TYPE + get_bits1(&s->gb); | 5239 s->pict_type = I_TYPE + get_bits1(&s->gb); |
5240 | 5240 |
5241 s->unrestricted_mv = get_bits1(&s->gb); | 5241 s->unrestricted_mv = get_bits1(&s->gb); |
5242 s->h263_long_vectors = s->unrestricted_mv; | 5242 s->h263_long_vectors = s->unrestricted_mv; |
5243 | 5243 |
5244 if (get_bits1(&s->gb) != 0) { | 5244 if (get_bits1(&s->gb) != 0) { |
5245 fprintf(stderr, "SAC not supported\n"); | 5245 av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n"); |
5246 return -1; /* SAC: off */ | 5246 return -1; /* SAC: off */ |
5247 } | 5247 } |
5248 if (get_bits1(&s->gb) != 0) { | 5248 if (get_bits1(&s->gb) != 0) { |
5249 fprintf(stderr, "Advanced Prediction Mode not supported\n"); | 5249 av_log(s->avctx, AV_LOG_ERROR, "Advanced Prediction Mode not supported\n"); |
5250 return -1; /* advanced prediction mode: off */ | 5250 return -1; /* advanced prediction mode: off */ |
5251 } | 5251 } |
5252 if (get_bits1(&s->gb) != 0) { | 5252 if (get_bits1(&s->gb) != 0) { |
5253 fprintf(stderr, "PB frame mode no supported\n"); | 5253 av_log(s->avctx, AV_LOG_ERROR, "PB frame mode no supported\n"); |
5254 return -1; /* PB frame mode */ | 5254 return -1; /* PB frame mode */ |
5255 } | 5255 } |
5256 | 5256 |
5257 /* skip unknown header garbage */ | 5257 /* skip unknown header garbage */ |
5258 skip_bits(&s->gb, 41); | 5258 skip_bits(&s->gb, 41); |
5276 { | 5276 { |
5277 int format, width, height; | 5277 int format, width, height; |
5278 | 5278 |
5279 /* picture header */ | 5279 /* picture header */ |
5280 if (get_bits_long(&s->gb, 17) != 1) { | 5280 if (get_bits_long(&s->gb, 17) != 1) { |
5281 fprintf(stderr, "Bad picture start code\n"); | 5281 av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n"); |
5282 return -1; | 5282 return -1; |
5283 } | 5283 } |
5284 format = get_bits(&s->gb, 5); | 5284 format = get_bits(&s->gb, 5); |
5285 if (format != 0 && format != 1) { | 5285 if (format != 0 && format != 1) { |
5286 fprintf(stderr, "Bad picture format\n"); | 5286 av_log(s->avctx, AV_LOG_ERROR, "Bad picture format\n"); |
5287 return -1; | 5287 return -1; |
5288 } | 5288 } |
5289 s->h263_flv = format+1; | 5289 s->h263_flv = format+1; |
5290 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */ | 5290 s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */ |
5291 format = get_bits(&s->gb, 3); | 5291 format = get_bits(&s->gb, 3); |
5343 skip_bits(&s->gb, 8); | 5343 skip_bits(&s->gb, 8); |
5344 } | 5344 } |
5345 s->f_code = 1; | 5345 s->f_code = 1; |
5346 | 5346 |
5347 if(s->avctx->debug & FF_DEBUG_PICT_INFO){ | 5347 if(s->avctx->debug & FF_DEBUG_PICT_INFO){ |
5348 printf("%c esc_type:%d, qp:%d num:%d\n", | 5348 av_log(s->avctx, AV_LOG_DEBUG, "%c esc_type:%d, qp:%d num:%d\n", |
5349 av_get_pict_type_char(s->pict_type), s->h263_flv-1, s->qscale, s->picture_number); | 5349 av_get_pict_type_char(s->pict_type), s->h263_flv-1, s->qscale, s->picture_number); |
5350 } | 5350 } |
5351 | 5351 |
5352 s->y_dc_scale_table= | 5352 s->y_dc_scale_table= |
5353 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; | 5353 s->c_dc_scale_table= ff_mpeg1_dc_scale_table; |