[x264-devel] commit: Fix some uses of uninitialized row_satd values in VBV ( Jason Garrett-Glaser )

git version control git at videolan.org
Wed Aug 27 19:11:57 CEST 2008


x264 | branch: master | Jason Garrett-Glaser <darkshikari at gmail.com> | Wed Aug 27 13:14:36 2008 -0400| [445d87ec5188aa7f6303e0dcf1c943b80ed6c933] | committer: Jason Garrett-Glaser 

Fix some uses of uninitialized row_satd values in VBV
Resolves some issues with QP51 in I-frames with scenecut

> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=445d87ec5188aa7f6303e0dcf1c943b80ed6c933
---

 common/mc.c         |    8 +++++---
 encoder/slicetype.c |    3 ++-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/common/mc.c b/common/mc.c
index 3b720af..5217253 100644
--- a/common/mc.c
+++ b/common/mc.c
@@ -299,9 +299,11 @@ void x264_frame_init_lowres( x264_t *h, x264_frame_t *frame )
                                   i_stride, frame->i_stride_lowres, frame->i_width_lowres, frame->i_lines_lowres );
     x264_frame_expand_border_lowres( frame );
 
-    for( y=0; y<16; y++ )
-        for( x=0; x<16; x++ )
-            frame->i_cost_est[y][x] = -1;
+    memset( frame->i_cost_est, -1, sizeof(frame->i_cost_est) );
+
+    for( x = 0; x < h->param.i_bframe + 2; x++ )
+        for( y = 0; y < h->param.i_bframe + 2; y++ )
+            frame->i_row_satds[y][x][0] = -1;
 }
 
 static void frame_init_lowres_core( uint8_t *src0, uint8_t *dst0, uint8_t *dsth, uint8_t *dstv, uint8_t *dstc,
diff --git a/encoder/slicetype.c b/encoder/slicetype.c
index 84fabfe..e68b06e 100644
--- a/encoder/slicetype.c
+++ b/encoder/slicetype.c
@@ -247,7 +247,8 @@ static int x264_slicetype_frame_cost( x264_t *h, x264_mb_analysis_t *a,
     /* Check whether we already evaluated this frame
      * If we have tried this frame as P, then we have also tried
      * the preceding frames as B. (is this still true?) */
-    if( frames[b]->i_cost_est[b-p0][p1-b] >= 0 )
+    /* Also check that we already calculated the row SATDs for the current frame. */
+    if( frames[b]->i_cost_est[b-p0][p1-b] >= 0 && frames[b]->i_row_satds[b-p0][p1-b][0] != -1 )
     {
         i_score = frames[b]->i_cost_est[b-p0][p1-b];
     }



More information about the x264-devel mailing list