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));