Mercurial > libavcodec.hg
comparison vc1dec.c @ 9863:ff0ea87dd64e libavcodec
VC-1/WMV: Remove redundant ff_init_block_index() calls.
These are only supposed to be called once per row, not once per macroblock.
~1.5% faster according to oprofile.
author | darkshikari |
---|---|
date | Wed, 17 Jun 2009 05:54:42 +0000 |
parents | 7e82083caab7 |
children | c69559e9f6c3 |
comparison
equal
deleted
inserted
replaced
9862:db929fcaeb9a | 9863:ff0ea87dd64e |
---|---|
2615 //do frame decode | 2615 //do frame decode |
2616 s->mb_x = s->mb_y = 0; | 2616 s->mb_x = s->mb_y = 0; |
2617 s->mb_intra = 1; | 2617 s->mb_intra = 1; |
2618 s->first_slice_line = 1; | 2618 s->first_slice_line = 1; |
2619 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { | 2619 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { |
2620 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { | 2620 s->mb_x = 0; |
2621 ff_init_block_index(s); | 2621 ff_init_block_index(s); |
2622 for(; s->mb_x < s->mb_width; s->mb_x++) { | |
2622 ff_update_block_index(s); | 2623 ff_update_block_index(s); |
2623 s->dsp.clear_blocks(s->block[0]); | 2624 s->dsp.clear_blocks(s->block[0]); |
2624 mb_pos = s->mb_x + s->mb_y * s->mb_width; | 2625 mb_pos = s->mb_x + s->mb_y * s->mb_width; |
2625 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; | 2626 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; |
2626 s->current_picture.qscale_table[mb_pos] = v->pq; | 2627 s->current_picture.qscale_table[mb_pos] = v->pq; |
2728 //do frame decode | 2729 //do frame decode |
2729 s->mb_x = s->mb_y = 0; | 2730 s->mb_x = s->mb_y = 0; |
2730 s->mb_intra = 1; | 2731 s->mb_intra = 1; |
2731 s->first_slice_line = 1; | 2732 s->first_slice_line = 1; |
2732 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { | 2733 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { |
2733 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { | 2734 s->mb_x = 0; |
2734 ff_init_block_index(s); | 2735 ff_init_block_index(s); |
2736 for(;s->mb_x < s->mb_width; s->mb_x++) { | |
2735 ff_update_block_index(s); | 2737 ff_update_block_index(s); |
2736 s->dsp.clear_blocks(s->block[0]); | 2738 s->dsp.clear_blocks(s->block[0]); |
2737 mb_pos = s->mb_x + s->mb_y * s->mb_stride; | 2739 mb_pos = s->mb_x + s->mb_y * s->mb_stride; |
2738 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; | 2740 s->current_picture.mb_type[mb_pos] = MB_TYPE_INTRA; |
2739 s->current_picture.motion_val[1][s->block_index[0]][0] = 0; | 2741 s->current_picture.motion_val[1][s->block_index[0]][0] = 0; |
2847 } | 2849 } |
2848 | 2850 |
2849 s->first_slice_line = 1; | 2851 s->first_slice_line = 1; |
2850 memset(v->cbp_base, 0, sizeof(v->cbp_base[0])*2*s->mb_stride); | 2852 memset(v->cbp_base, 0, sizeof(v->cbp_base[0])*2*s->mb_stride); |
2851 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { | 2853 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { |
2852 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { | 2854 s->mb_x = 0; |
2853 ff_init_block_index(s); | 2855 ff_init_block_index(s); |
2856 for(; s->mb_x < s->mb_width; s->mb_x++) { | |
2854 ff_update_block_index(s); | 2857 ff_update_block_index(s); |
2855 | 2858 |
2856 vc1_decode_p_mb(v); | 2859 vc1_decode_p_mb(v); |
2857 if(get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { | 2860 if(get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { |
2858 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)); | 2861 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)); |
2896 break; | 2899 break; |
2897 } | 2900 } |
2898 | 2901 |
2899 s->first_slice_line = 1; | 2902 s->first_slice_line = 1; |
2900 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { | 2903 for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) { |
2901 for(s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) { | 2904 s->mb_x = 0; |
2902 ff_init_block_index(s); | 2905 ff_init_block_index(s); |
2906 for(; s->mb_x < s->mb_width; s->mb_x++) { | |
2903 ff_update_block_index(s); | 2907 ff_update_block_index(s); |
2904 | 2908 |
2905 vc1_decode_b_mb(v); | 2909 vc1_decode_b_mb(v); |
2906 if(get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { | 2910 if(get_bits_count(&s->gb) > v->bits || get_bits_count(&s->gb) < 0) { |
2907 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)); | 2911 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)); |