[x264-devel] commit: Fix regression in r1066 (Jason Garrett-Glaser )

git version control git at videolan.org
Thu Jan 8 21:36:51 CET 2009


x264 | branch: master | Jason Garrett-Glaser <darkshikari at gmail.com> | Thu Jan  8 15:07:16 2009 -0500| [b6bb3d4287727b73291f9e9a2bf38589ac397382] | committer: Jason Garrett-Glaser 

Fix regression in r1066
With some combinations of video width and other settings, the scratch buffer was slightly too small.
This caused heap corruption on some systems.
Also prevent merange from being raised during encoding with esa/tesa through encoder_reconfig, as this no longer works.

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

 common/macroblock.c |    4 ++--
 encoder/encoder.c   |    4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/common/macroblock.c b/common/macroblock.c
index 9029a34..b9feb4a 100644
--- a/common/macroblock.c
+++ b/common/macroblock.c
@@ -839,11 +839,11 @@ int x264_macroblock_cache_init( x264_t *h )
     h->mb.i_neighbour4[15] =
     h->mb.i_neighbour8[3] = MB_LEFT|MB_TOP|MB_TOPLEFT;
 
-    int buf_hpel = (h->param.i_width+40) * sizeof(int16_t);
+    int buf_hpel = (h->param.i_width+48) * sizeof(int16_t);
     int buf_ssim = h->param.analyse.b_ssim * 8 * (h->param.i_width/4+3) * sizeof(int);
     int me_range = X264_MIN(h->param.analyse.i_me_range, h->param.analyse.i_mv_range);
     int buf_tesa = (h->param.analyse.i_me_method >= X264_ME_ESA) *
-        ((me_range*2+18) * sizeof(int16_t) + (me_range+1) * (me_range+1) * 4 * sizeof(mvsad_t));
+        ((me_range*2+18) * sizeof(int16_t) + (me_range+4) * (me_range+1) * 4 * sizeof(mvsad_t));
     CHECKED_MALLOC( h->scratch_buffer, X264_MAX3( buf_hpel, buf_ssim, buf_tesa ) );
 
     return 0;
diff --git a/encoder/encoder.c b/encoder/encoder.c
index 3120e94..169ab72 100644
--- a/encoder/encoder.c
+++ b/encoder/encoder.c
@@ -826,7 +826,9 @@ int x264_encoder_reconfig( x264_t *h, x264_param_t *param )
     COPY( analyse.intra );
     COPY( analyse.inter );
     COPY( analyse.i_direct_mv_pred );
-    COPY( analyse.i_me_range );
+    /* Scratch buffer prevents me_range from being increased for esa/tesa */
+    if( h->param.analyse.i_me_method < X264_ME_ESA || param->analyse.i_me_range < h->param.analyse.i_me_range )
+        COPY( analyse.i_me_range );
     COPY( analyse.i_noise_reduction );
     /* We can't switch out of subme=0 during encoding. */
     if( h->param.analyse.i_subpel_refine )



More information about the x264-devel mailing list