comparison h263.c @ 698:e050a053e259 libavcodec

h263_dc_scale() cleanup
author michaelni
date Thu, 26 Sep 2002 09:16:23 +0000
parents c622224012f0
children f69f9cb461bc
comparison
equal deleted inserted replaced
697:c622224012f0 698:e050a053e259
1621 s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table; 1621 s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
1622 s->h_edge_pos= s->width; 1622 s->h_edge_pos= s->width;
1623 s->v_edge_pos= s->height; 1623 s->v_edge_pos= s->height;
1624 } 1624 }
1625 1625
1626 static void h263_dc_scale(MpegEncContext * s) 1626 static void change_qscale(MpegEncContext * s, int dquant)
1627 { 1627 {
1628 s->qscale += dquant;
1629
1630 if (s->qscale < 1)
1631 s->qscale = 1;
1632 else if (s->qscale > 31)
1633 s->qscale = 31;
1634
1628 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ]; 1635 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
1629 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ]; 1636 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
1630 } 1637 }
1631 1638
1632 inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr) 1639 inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr)
2383 s->cbp_table[xy]= cbpc & 3; 2390 s->cbp_table[xy]= cbpc & 3;
2384 s->mb_type[xy]= MB_TYPE_INTRA; 2391 s->mb_type[xy]= MB_TYPE_INTRA;
2385 s->mb_intra = 1; 2392 s->mb_intra = 1;
2386 2393
2387 if(cbpc & 4) { 2394 if(cbpc & 4) {
2388 s->qscale += quant_tab[get_bits(&s->gb, 2)]; 2395 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
2389 if (s->qscale < 1)
2390 s->qscale = 1;
2391 else if (s->qscale > 31)
2392 s->qscale = 31;
2393 h263_dc_scale(s);
2394 } 2396 }
2395 s->qscale_table[xy]= s->qscale; 2397 s->qscale_table[xy]= s->qscale;
2396 2398
2397 s->mbintra_table[xy]= 1; 2399 s->mbintra_table[xy]= 1;
2398 for(i=0; i<6; i++){ 2400 for(i=0; i<6; i++){
2565 fprintf(stderr, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); 2567 fprintf(stderr, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
2566 return DECODING_ACDC_LOST; 2568 return DECODING_ACDC_LOST;
2567 } 2569 }
2568 2570
2569 if(s->cbp_table[xy] & 8) { 2571 if(s->cbp_table[xy] & 8) {
2570 s->qscale += quant_tab[get_bits(&s->gb, 2)]; 2572 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
2571 if (s->qscale < 1)
2572 s->qscale = 1;
2573 else if (s->qscale > 31)
2574 s->qscale = 31;
2575 h263_dc_scale(s);
2576 } 2573 }
2577 s->qscale_table[xy]= s->qscale; 2574 s->qscale_table[xy]= s->qscale;
2578 2575
2579 for(i=0; i<6; i++){ 2576 for(i=0; i<6; i++){
2580 int dc_pred_dir; 2577 int dc_pred_dir;
2599 fprintf(stderr, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y); 2596 fprintf(stderr, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
2600 return DECODING_ACDC_LOST; 2597 return DECODING_ACDC_LOST;
2601 } 2598 }
2602 2599
2603 if(s->cbp_table[xy] & 8) { 2600 if(s->cbp_table[xy] & 8) {
2604 //fprintf(stderr, "dquant\n"); 2601 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
2605 s->qscale += quant_tab[get_bits(&s->gb, 2)];
2606 if (s->qscale < 1)
2607 s->qscale = 1;
2608 else if (s->qscale > 31)
2609 s->qscale = 31;
2610 h263_dc_scale(s);
2611 } 2602 }
2612 s->qscale_table[xy]= s->qscale; 2603 s->qscale_table[xy]= s->qscale;
2613 2604
2614 s->cbp_table[xy]&= 3; //remove dquant 2605 s->cbp_table[xy]&= 3; //remove dquant
2615 s->cbp_table[xy]|= (cbpy^0xf)<<2; 2606 s->cbp_table[xy]|= (cbpy^0xf)<<2;
2641 for(i=0; i<6; i++) s->block_index[i]= block_index_backup[i]; 2632 for(i=0; i<6; i++) s->block_index[i]= block_index_backup[i];
2642 s->first_slice_line=1; 2633 s->first_slice_line=1;
2643 s->mb_x= s->resync_mb_x; 2634 s->mb_x= s->resync_mb_x;
2644 s->mb_y= s->resync_mb_y; 2635 s->mb_y= s->resync_mb_y;
2645 s->qscale= qscale; 2636 s->qscale= qscale;
2646 h263_dc_scale(s); 2637 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
2638 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
2647 2639
2648 if(s->decoding_error==DECODING_DESYNC) return -1; 2640 if(s->decoding_error==DECODING_DESYNC) return -1;
2649 } 2641 }
2650 2642
2651 mb_type= s->mb_type[xy]; 2643 mb_type= s->mb_type[xy];
2654 else 2646 else
2655 cbp = s->cbp_table[xy]; 2647 cbp = s->cbp_table[xy];
2656 2648
2657 if(s->decoding_error!=DECODING_ACDC_LOST && s->qscale_table[xy] != s->qscale){ 2649 if(s->decoding_error!=DECODING_ACDC_LOST && s->qscale_table[xy] != s->qscale){
2658 s->qscale= s->qscale_table[xy]; 2650 s->qscale= s->qscale_table[xy];
2659 h263_dc_scale(s); 2651 s->y_dc_scale= s->y_dc_scale_table[ s->qscale ];
2652 s->c_dc_scale= s->c_dc_scale_table[ s->qscale ];
2660 } 2653 }
2661 2654
2662 if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) { 2655 if (s->pict_type == P_TYPE || s->pict_type==S_TYPE) {
2663 int i; 2656 int i;
2664 for(i=0; i<4; i++){ 2657 for(i=0; i<4; i++){
2841 s->mcsel= get_bits1(&s->gb); 2834 s->mcsel= get_bits1(&s->gb);
2842 else s->mcsel= 0; 2835 else s->mcsel= 0;
2843 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); 2836 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
2844 cbp = (cbpc & 3) | ((cbpy ^ 0xf) << 2); 2837 cbp = (cbpc & 3) | ((cbpy ^ 0xf) << 2);
2845 if (dquant) { 2838 if (dquant) {
2846 s->qscale += quant_tab[get_bits(&s->gb, 2)]; 2839 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
2847 if (s->qscale < 1)
2848 s->qscale = 1;
2849 else if (s->qscale > 31)
2850 s->qscale = 31;
2851 h263_dc_scale(s);
2852 } 2840 }
2853 if((!s->progressive_sequence) && (cbp || s->workaround_bugs==2)) 2841 if((!s->progressive_sequence) && (cbp || s->workaround_bugs==2))
2854 s->interlaced_dct= get_bits1(&s->gb); 2842 s->interlaced_dct= get_bits1(&s->gb);
2855 2843
2856 s->mv_dir = MV_DIR_FORWARD; 2844 s->mv_dir = MV_DIR_FORWARD;
2995 if(modb2) cbp= 0; 2983 if(modb2) cbp= 0;
2996 else cbp= get_bits(&s->gb, 6); 2984 else cbp= get_bits(&s->gb, 6);
2997 2985
2998 if (mb_type!=MB_TYPE_B_DIRECT && cbp) { 2986 if (mb_type!=MB_TYPE_B_DIRECT && cbp) {
2999 if(get_bits1(&s->gb)){ 2987 if(get_bits1(&s->gb)){
3000 s->qscale +=get_bits1(&s->gb)*4 - 2; 2988 change_qscale(s, get_bits1(&s->gb)*4 - 2);
3001 if (s->qscale < 1)
3002 s->qscale = 1;
3003 else if (s->qscale > 31)
3004 s->qscale = 31;
3005 h263_dc_scale(s);
3006 } 2989 }
3007 } 2990 }
3008 field_mv=0; 2991 field_mv=0;
3009 2992
3010 if(!s->progressive_sequence){ 2993 if(!s->progressive_sequence){
3160 3143
3161 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); 3144 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
3162 if(cbpy<0) return -1; 3145 if(cbpy<0) return -1;
3163 cbp = (cbpc & 3) | (cbpy << 2); 3146 cbp = (cbpc & 3) | (cbpy << 2);
3164 if (dquant) { 3147 if (dquant) {
3165 s->qscale += quant_tab[get_bits(&s->gb, 2)]; 3148 change_qscale(s, quant_tab[get_bits(&s->gb, 2)]);
3166 if (s->qscale < 1)
3167 s->qscale = 1;
3168 else if (s->qscale > 31)
3169 s->qscale = 31;
3170 h263_dc_scale(s);
3171 } 3149 }
3172 if(!s->progressive_sequence) 3150 if(!s->progressive_sequence)
3173 s->interlaced_dct= get_bits1(&s->gb); 3151 s->interlaced_dct= get_bits1(&s->gb);
3174 3152
3175 /* decode each block */ 3153 /* decode each block */