comparison vc1dec.c @ 12141:c3682c0606e3 libavcodec

vc1: ff_draw_horiz_band needs a one row delay when the loop filter is active
author conrad
date Sun, 11 Jul 2010 22:52:47 +0000
parents 9ba7d2a5b20a
children 7e93f85e48bf
comparison
equal deleted inserted replaced
12140:3d186eff2224 12141:c3682c0606e3
2678 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)); 2678 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END));
2679 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); 2679 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits);
2680 return; 2680 return;
2681 } 2681 }
2682 } 2682 }
2683 ff_draw_horiz_band(s, s->mb_y * 16, 16); 2683 if (!v->s.loop_filter)
2684 ff_draw_horiz_band(s, s->mb_y * 16, 16);
2685 else if (s->mb_y)
2686 ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16);
2687
2684 s->first_slice_line = 0; 2688 s->first_slice_line = 0;
2685 } 2689 }
2690 if (v->s.loop_filter)
2691 ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
2686 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); 2692 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
2687 } 2693 }
2688 2694
2689 /** Decode blocks of I-frame for advanced profile 2695 /** Decode blocks of I-frame for advanced profile
2690 */ 2696 */
2810 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END)); 2816 ff_er_add_slice(s, 0, 0, s->mb_x, s->mb_y, (AC_END|DC_END|MV_END));
2811 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits); 2817 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i\n", get_bits_count(&s->gb), v->bits);
2812 return; 2818 return;
2813 } 2819 }
2814 } 2820 }
2815 ff_draw_horiz_band(s, s->mb_y * 16, 16); 2821 if (!v->s.loop_filter)
2822 ff_draw_horiz_band(s, s->mb_y * 16, 16);
2823 else if (s->mb_y)
2824 ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16);
2816 s->first_slice_line = 0; 2825 s->first_slice_line = 0;
2817 } 2826 }
2827 if (v->s.loop_filter)
2828 ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
2818 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); 2829 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
2819 } 2830 }
2820 2831
2821 static void vc1_decode_p_blocks(VC1Context *v) 2832 static void vc1_decode_p_blocks(VC1Context *v)
2822 { 2833 {
2911 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", get_bits_count(&s->gb), v->bits,s->mb_x,s->mb_y); 2922 av_log(s->avctx, AV_LOG_ERROR, "Bits overconsumption: %i > %i at %ix%i\n", get_bits_count(&s->gb), v->bits,s->mb_x,s->mb_y);
2912 return; 2923 return;
2913 } 2924 }
2914 if(v->s.loop_filter) vc1_loop_filter_iblk(s, v->pq); 2925 if(v->s.loop_filter) vc1_loop_filter_iblk(s, v->pq);
2915 } 2926 }
2916 ff_draw_horiz_band(s, s->mb_y * 16, 16); 2927 if (!v->s.loop_filter)
2928 ff_draw_horiz_band(s, s->mb_y * 16, 16);
2929 else if (s->mb_y)
2930 ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16);
2917 s->first_slice_line = 0; 2931 s->first_slice_line = 0;
2918 } 2932 }
2933 if (v->s.loop_filter)
2934 ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
2919 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); 2935 ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
2920 } 2936 }
2921 2937
2922 static void vc1_decode_skip_blocks(VC1Context *v) 2938 static void vc1_decode_skip_blocks(VC1Context *v)
2923 { 2939 {