Mercurial > libavcodec.hg
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 */ |