diff options
author | David Conrad <lessen42@gmail.com> | 2010-07-11 22:52:47 +0000 |
---|---|---|
committer | David Conrad <lessen42@gmail.com> | 2010-07-11 22:52:47 +0000 |
commit | 3683b7e5700c1cf99b1c699030ad150fb3731c76 (patch) | |
tree | f05ccb08596f26ad29550c2ec7aca8f2be6081d1 /libavcodec/vc1dec.c | |
parent | e26011d0f495de1148b8014995cbe923611b6b76 (diff) | |
download | ffmpeg-streaming-3683b7e5700c1cf99b1c699030ad150fb3731c76.zip ffmpeg-streaming-3683b7e5700c1cf99b1c699030ad150fb3731c76.tar.gz |
vc1: ff_draw_horiz_band needs a one row delay when the loop filter is active
Originally committed as revision 24205 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vc1dec.c')
-rw-r--r-- | libavcodec/vc1dec.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index e547c26..0d21e1c 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -2680,9 +2680,15 @@ static void vc1_decode_i_blocks(VC1Context *v) return; } } - ff_draw_horiz_band(s, s->mb_y * 16, 16); + if (!v->s.loop_filter) + ff_draw_horiz_band(s, s->mb_y * 16, 16); + else if (s->mb_y) + ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16); + s->first_slice_line = 0; } + if (v->s.loop_filter) + ff_draw_horiz_band(s, (s->mb_height-1)*16, 16); ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); } @@ -2812,9 +2818,14 @@ static void vc1_decode_i_blocks_adv(VC1Context *v) return; } } - ff_draw_horiz_band(s, s->mb_y * 16, 16); + if (!v->s.loop_filter) + ff_draw_horiz_band(s, s->mb_y * 16, 16); + else if (s->mb_y) + ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16); s->first_slice_line = 0; } + if (v->s.loop_filter) + ff_draw_horiz_band(s, (s->mb_height-1)*16, 16); ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); } @@ -2913,9 +2924,14 @@ static void vc1_decode_b_blocks(VC1Context *v) } if(v->s.loop_filter) vc1_loop_filter_iblk(s, v->pq); } - ff_draw_horiz_band(s, s->mb_y * 16, 16); + if (!v->s.loop_filter) + ff_draw_horiz_band(s, s->mb_y * 16, 16); + else if (s->mb_y) + ff_draw_horiz_band(s, (s->mb_y-1) * 16, 16); s->first_slice_line = 0; } + if (v->s.loop_filter) + ff_draw_horiz_band(s, (s->mb_height-1)*16, 16); ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END)); } |