[x264-devel] Fix: chroma planes for weightp analysis were not initted if U early-terminates and V doesn 't.
Loren Merritt
git at videolan.org
Wed Aug 24 22:40:15 CEST 2011
x264 | branch: master | Loren Merritt <pengvado at akuvian.org> | Thu Aug 11 01:33:13 2011 +0000| [fd3fb348f9bc1ae2ebac62315da8807554ff3a52] | committer: Jason Garrett-Glaser
Fix: chroma planes for weightp analysis were not initted if U early-terminates and V doesn't.
> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=fd3fb348f9bc1ae2ebac62315da8807554ff3a52
---
encoder/slicetype.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/encoder/slicetype.c b/encoder/slicetype.c
index f005b5f..a5ecb2b 100644
--- a/encoder/slicetype.c
+++ b/encoder/slicetype.c
@@ -96,12 +96,12 @@ static NOINLINE pixel *x264_weight_cost_init_luma( x264_t *h, x264_frame_t *fenc
return ref->lowres[0];
}
-/* How data is organized for chroma weightp:
+/* How data is organized for chroma weightp 4:2:0:
* [U: ref] [U: fenc]
* [V: ref] [V: fenc]
* fenc = ref + offset
* v = u + stride * chroma height
- * We'll need more room if we do 4:2:2 or 4:4:4. */
+ * We'll need more room if we do 4:2:2. */
static NOINLINE void x264_weight_cost_init_chroma( x264_t *h, x264_frame_t *fenc, x264_frame_t *ref, pixel *dstu, pixel *dstv )
{
@@ -289,6 +289,7 @@ void x264_weights_analyse( x264_t *h, x264_frame_t *fenc, x264_frame_t *ref, int
SET_WEIGHT( weights[0], 0, 1, 0, 0 );
SET_WEIGHT( weights[1], 0, 1, 0, 0 );
SET_WEIGHT( weights[2], 0, 1, 0, 0 );
+ int chroma_initted = 0;
/* Don't check chroma in lookahead, or if there wasn't a luma weight. */
for( int plane = 0; plane <= 2 && !( plane && ( !weights[0].weightfn || b_lookahead ) ); plane++ )
{
@@ -350,8 +351,7 @@ void x264_weights_analyse( x264_t *h, x264_frame_t *fenc, x264_frame_t *ref, int
{
pixel *dstu = h->mb.p_weight_buf[0];
pixel *dstv = h->mb.p_weight_buf[0]+fenc->i_stride[1]*fenc->i_lines[1];
- /* Only initialize chroma data once. */
- if( plane == 1 )
+ if( !chroma_initted++ )
x264_weight_cost_init_chroma( h, fenc, ref, dstu, dstv );
mcbuf = plane == 1 ? dstu : dstv;
origscore = minscore = x264_weight_cost_chroma( h, fenc, mcbuf, NULL );
More information about the x264-devel
mailing list