Mercurial > libavcodec.hg
comparison h263.c @ 1652:834922115010 libavcodec
cleanup
author | michael |
---|---|
date | Wed, 03 Dec 2003 16:47:17 +0000 |
parents | e6a474a5b929 |
children | c92147a61d97 |
comparison
equal
deleted
inserted
replaced
1651:ccf7c96a630f | 1652:834922115010 |
---|---|
2237 } | 2237 } |
2238 | 2238 |
2239 #endif //CONFIG_ENCODERS | 2239 #endif //CONFIG_ENCODERS |
2240 | 2240 |
2241 /** | 2241 /** |
2242 * change qscale by given dquant and update qscale dependant variables. | 2242 * set qscale and update qscale dependant variables. |
2243 */ | 2243 */ |
2244 static void change_qscale(MpegEncContext * s, int dquant) | 2244 void ff_set_qscale(MpegEncContext * s, int qscale) |
2245 { | 2245 { |
2246 s->qscale += dquant; | 2246 if (qscale < 1) |
2247 | 2247 qscale = 1; |
2248 if (s->qscale < 1) | 2248 else if (qscale > 31) |
2249 s->qscale = 1; | 2249 qscale = 31; |
2250 else if (s->qscale > 31) | 2250 |
2251 s->qscale = 31; | 2251 s->qscale = qscale; |
2252 | 2252 s->chroma_qscale= s->chroma_qscale_table[qscale]; |
2253 s->chroma_qscale= s->chroma_qscale_table[s->qscale]; | 2253 |
2254 | 2254 s->y_dc_scale= s->y_dc_scale_table[ qscale ]; |
2255 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; | |
2256 s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; | 2255 s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; |
2257 } | 2256 } |
2258 | 2257 |
2259 /** | 2258 /** |
2260 * predicts the dc. | 2259 * predicts the dc. |
2744 s->gob_number = get_bits(&s->gb, 5); /* GN */ | 2743 s->gob_number = get_bits(&s->gb, 5); /* GN */ |
2745 gfid = get_bits(&s->gb, 2); /* GFID */ | 2744 gfid = get_bits(&s->gb, 2); /* GFID */ |
2746 s->qscale = get_bits(&s->gb, 5); /* GQUANT */ | 2745 s->qscale = get_bits(&s->gb, 5); /* GQUANT */ |
2747 if(s->qscale==0) | 2746 if(s->qscale==0) |
2748 return -1; | 2747 return -1; |
2749 s->chroma_qscale= s->chroma_qscale_table[s->qscale]; | |
2750 | 2748 |
2751 s->mb_x= 0; | 2749 s->mb_x= 0; |
2752 s->mb_y= s->gob_index* s->gob_number; | 2750 s->mb_y= s->gob_index* s->gob_number; |
2753 if(s->mb_y >= s->mb_height) | 2751 if(s->mb_y >= s->mb_height) |
2754 return -1; | 2752 return -1; |
3121 s->cbp_table[xy]= cbpc & 3; | 3119 s->cbp_table[xy]= cbpc & 3; |
3122 s->current_picture.mb_type[xy]= MB_TYPE_INTRA; | 3120 s->current_picture.mb_type[xy]= MB_TYPE_INTRA; |
3123 s->mb_intra = 1; | 3121 s->mb_intra = 1; |
3124 | 3122 |
3125 if(cbpc & 4) { | 3123 if(cbpc & 4) { |
3126 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); | 3124 ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]); |
3127 } | 3125 } |
3128 s->current_picture.qscale_table[xy]= s->qscale; | 3126 s->current_picture.qscale_table[xy]= s->qscale; |
3129 | 3127 |
3130 s->mbintra_table[xy]= 1; | 3128 s->mbintra_table[xy]= 1; |
3131 for(i=0; i<6; i++){ | 3129 for(i=0; i<6; i++){ |
3284 av_log(s->avctx, AV_LOG_ERROR, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); | 3282 av_log(s->avctx, AV_LOG_ERROR, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); |
3285 return -1; | 3283 return -1; |
3286 } | 3284 } |
3287 | 3285 |
3288 if(s->cbp_table[xy] & 8) { | 3286 if(s->cbp_table[xy] & 8) { |
3289 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); | 3287 ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]); |
3290 } | 3288 } |
3291 s->current_picture.qscale_table[xy]= s->qscale; | 3289 s->current_picture.qscale_table[xy]= s->qscale; |
3292 | 3290 |
3293 for(i=0; i<6; i++){ | 3291 for(i=0; i<6; i++){ |
3294 int dc_pred_dir; | 3292 int dc_pred_dir; |
3314 av_log(s->avctx, AV_LOG_ERROR, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); | 3312 av_log(s->avctx, AV_LOG_ERROR, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); |
3315 return -1; | 3313 return -1; |
3316 } | 3314 } |
3317 | 3315 |
3318 if(s->cbp_table[xy] & 8) { | 3316 if(s->cbp_table[xy] & 8) { |
3319 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]); | 3317 ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]); |
3320 } | 3318 } |
3321 s->current_picture.qscale_table[xy]= s->qscale; | 3319 s->current_picture.qscale_table[xy]= s->qscale; |
3322 | 3320 |
3323 s->cbp_table[xy]&= 3; //remove dquant | 3321 s->cbp_table[xy]&= 3; //remove dquant |
3324 s->cbp_table[xy]|= (cbpy^0xf)<<2; | 3322 s->cbp_table[xy]|= (cbpy^0xf)<<2; |
3391 | 3389 |
3392 mb_type= s->current_picture.mb_type[xy]; | 3390 mb_type= s->current_picture.mb_type[xy]; |
3393 cbp = s->cbp_table[xy]; | 3391 cbp = s->cbp_table[xy]; |
3394 | 3392 |
3395 if(s->current_picture.qscale_table[xy] != s->qscale){ | 3393 if(s->current_picture.qscale_table[xy] != s->qscale){ |
3396 s->chroma_qscale=s->qscale= s->current_picture.qscale_table[xy]; | 3394 ff_set_qscale(s, s->current_picture.qscale_table[xy] ); |
3397 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; | |
3398 s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; | |
3399 } | 3395 } |
3400 | 3396 |
3401 if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) { | 3397 if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) { |
3402 int i; | 3398 int i; |
3403 for(i=0; i<4; i++){ | 3399 for(i=0; i<4; i++){ |
3606 s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ]; | 3602 s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ]; |
3607 else | 3603 else |
3608 s->qscale= get_bits(&s->gb, 5); | 3604 s->qscale= get_bits(&s->gb, 5); |
3609 }else | 3605 }else |
3610 s->qscale += quant_tab[get_bits(&s->gb, 2)]; | 3606 s->qscale += quant_tab[get_bits(&s->gb, 2)]; |
3611 change_qscale(s, 0); | 3607 ff_set_qscale(s, s->qscale); |
3612 } | 3608 } |
3613 | 3609 |
3614 s->mv_dir = MV_DIR_FORWARD; | 3610 s->mv_dir = MV_DIR_FORWARD; |
3615 if ((cbpc & 16) == 0) { | 3611 if ((cbpc & 16) == 0) { |
3616 s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0; | 3612 s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0; |
3698 s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ]; | 3694 s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ]; |
3699 else | 3695 else |
3700 s->qscale= get_bits(&s->gb, 5); | 3696 s->qscale= get_bits(&s->gb, 5); |
3701 }else | 3697 }else |
3702 s->qscale += quant_tab[get_bits(&s->gb, 2)]; | 3698 s->qscale += quant_tab[get_bits(&s->gb, 2)]; |
3703 change_qscale(s, 0); | 3699 ff_set_qscale(s, s->qscale); |
3704 } | 3700 } |
3705 | 3701 |
3706 /* decode each block */ | 3702 /* decode each block */ |
3707 for (i = 0; i < 6; i++) { | 3703 for (i = 0; i < 6; i++) { |
3708 if (h263_decode_block(s, block[i], i, cbp&32) < 0) | 3704 if (h263_decode_block(s, block[i], i, cbp&32) < 0) |
3791 else s->mcsel= 0; | 3787 else s->mcsel= 0; |
3792 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1) ^ 0x0F; | 3788 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1) ^ 0x0F; |
3793 | 3789 |
3794 cbp = (cbpc & 3) | (cbpy << 2); | 3790 cbp = (cbpc & 3) | (cbpy << 2); |
3795 if (dquant) { | 3791 if (dquant) { |
3796 s->qscale += quant_tab[get_bits(&s->gb, 2)]; | 3792 ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]); |
3797 change_qscale(s, 0); | |
3798 } | 3793 } |
3799 if((!s->progressive_sequence) && (cbp || (s->workaround_bugs&FF_BUG_XVID_ILACE))) | 3794 if((!s->progressive_sequence) && (cbp || (s->workaround_bugs&FF_BUG_XVID_ILACE))) |
3800 s->interlaced_dct= get_bits1(&s->gb); | 3795 s->interlaced_dct= get_bits1(&s->gb); |
3801 | 3796 |
3802 s->mv_dir = MV_DIR_FORWARD; | 3797 s->mv_dir = MV_DIR_FORWARD; |
3916 if(modb2) cbp= 0; | 3911 if(modb2) cbp= 0; |
3917 else cbp= get_bits(&s->gb, 6); | 3912 else cbp= get_bits(&s->gb, 6); |
3918 | 3913 |
3919 if ((!IS_DIRECT(mb_type)) && cbp) { | 3914 if ((!IS_DIRECT(mb_type)) && cbp) { |
3920 if(get_bits1(&s->gb)){ | 3915 if(get_bits1(&s->gb)){ |
3921 change_qscale(s, get_bits1(&s->gb)*4 - 2); | 3916 ff_set_qscale(s, s->qscale + get_bits1(&s->gb)*4 - 2); |
3922 } | 3917 } |
3923 } | 3918 } |
3924 | 3919 |
3925 if(!s->progressive_sequence){ | 3920 if(!s->progressive_sequence){ |
3926 if(cbp) | 3921 if(cbp) |
4024 av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y); | 4019 av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y); |
4025 return -1; | 4020 return -1; |
4026 } | 4021 } |
4027 cbp = (cbpc & 3) | (cbpy << 2); | 4022 cbp = (cbpc & 3) | (cbpy << 2); |
4028 if (dquant) { | 4023 if (dquant) { |
4029 s->qscale += quant_tab[get_bits(&s->gb, 2)]; | 4024 ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]); |
4030 change_qscale(s, 0); | |
4031 } | 4025 } |
4032 | 4026 |
4033 if(!s->progressive_sequence) | 4027 if(!s->progressive_sequence) |
4034 s->interlaced_dct= get_bits1(&s->gb); | 4028 s->interlaced_dct= get_bits1(&s->gb); |
4035 | 4029 |
4747 skip_bits1(&s->gb); | 4741 skip_bits1(&s->gb); |
4748 } | 4742 } |
4749 } | 4743 } |
4750 | 4744 |
4751 s->qscale = get_bits(&s->gb, 5); | 4745 s->qscale = get_bits(&s->gb, 5); |
4752 s->chroma_qscale= s->chroma_qscale_table[s->qscale]; | |
4753 } | 4746 } |
4754 /* PEI */ | 4747 /* PEI */ |
4755 while (get_bits1(&s->gb) != 0) { | 4748 while (get_bits1(&s->gb) != 0) { |
4756 skip_bits(&s->gb, 8); | 4749 skip_bits(&s->gb, 8); |
4757 } | 4750 } |