[FFmpeg-cvslog] vc1dec: Implement intensity compensation for vc1_interp_mc()
Michael Niedermayer
git at videolan.org
Wed Apr 24 21:56:15 CEST 2013
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Wed Apr 24 20:41:31 2013 +0200| [84c0ec92ae793673b7584eaebc3cba09a2927dd5] | committer: Michael Niedermayer
vc1dec: Implement intensity compensation for vc1_interp_mc()
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=84c0ec92ae793673b7584eaebc3cba09a2927dd5
---
libavcodec/vc1dec.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index 050bd99..048745d 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -1918,7 +1918,7 @@ static void vc1_interp_mc(VC1Context *v)
srcV = s->edge_emu_buffer + 18 * s->linesize;
}
- if (v->rangeredfrm || s->h_edge_pos < 22 || v_edge_pos < 22
+ if (v->rangeredfrm || s->h_edge_pos < 22 || v_edge_pos < 22 || v->mv_mode == MV_PMODE_INTENSITY_COMP
|| (unsigned)(src_x - 1) > s->h_edge_pos - (mx & 3) - 16 - 3
|| (unsigned)(src_y - 1) > v_edge_pos - (my & 3) - 16 - 3) {
uint8_t *uvbuf = s->edge_emu_buffer + 19 * s->linesize;
@@ -1957,6 +1957,30 @@ static void vc1_interp_mc(VC1Context *v)
src2 += s->uvlinesize;
}
}
+
+ if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
+ const uint8_t *luty = v->next_luty [v->ref_field_type[1]];
+ const uint8_t *lutuv= v->next_lutuv[v->ref_field_type[1]];
+ int i, j;
+ uint8_t *src, *src2;
+
+ src = srcY;
+ for (j = 0; j < 17 + s->mspel * 2; j++) {
+ for (i = 0; i < 17 + s->mspel * 2; i++)
+ src[i] = luty[src[i]];
+ src += s->linesize;
+ }
+ src = srcU;
+ src2 = srcV;
+ for (j = 0; j < 9; j++) {
+ for (i = 0; i < 9; i++) {
+ src[i] = lutuv[src[i]];
+ src2[i] = lutuv[src2[i]];
+ }
+ src += s->uvlinesize;
+ src2 += s->uvlinesize;
+ }
+ }
srcY += s->mspel * (1 + s->linesize);
}
More information about the ffmpeg-cvslog
mailing list