aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/vc1dec.c
diff options
context:
space:
mode:
authorDavid Conrad <lessen42@gmail.com>2010-07-11 22:52:47 +0000
committerDavid Conrad <lessen42@gmail.com>2010-07-11 22:52:47 +0000
commit3683b7e5700c1cf99b1c699030ad150fb3731c76 (patch)
treef05ccb08596f26ad29550c2ec7aca8f2be6081d1 /libavcodec/vc1dec.c
parente26011d0f495de1148b8014995cbe923611b6b76 (diff)
downloadffmpeg-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.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index e547c2627f..0d21e1c1a5 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));
}