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 }