shithub: libvpx

Download patch

ref: 645b7cdf034727eb7bc946cb1e9fc1532ad44877
parent: 643c75d90b71af8fc636367cb8552b3ae9ee141d
author: Yaowu Xu <yaowu@google.com>
date: Mon Jan 26 10:29:15 EST 2015

move clear_system_state() call before using double

Floating point is used in vp9_convert_qindex_to_q(), so sometime unit
test ActiveMapTest would cause run time error without properly call
to clear_system_state to reset register status.

Change-Id: I181e9395148c44a6ca8b97d6e109bd4a152143c6

--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -490,18 +490,23 @@
   int pixels_wide = 64, pixels_high = 64;
   const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, LAST_FRAME);
   const struct scale_factors *const sf = &cm->frame_refs[LAST_FRAME - 1].sf;
-
   // Always use 4x4 partition for key frame.
   int use_4x4_partition = (cm->frame_type == KEY_FRAME);
-
   int variance4x4downsample[16];
   int low_res = (cm->width <= 352 && cm->height <= 288) ? 1 : 0;
   const int threshold_multiplier = cm->frame_type == KEY_FRAME ? 80 : 4;
-  int64_t threshold_base = (int64_t)(threshold_multiplier *
+  int64_t threshold_base;
+  int64_t threshold;
+  int64_t threshold_bsize_min;
+  int64_t threshold_bsize_max;
+
+  vp9_clear_system_state();
+  threshold_base = (int64_t)(threshold_multiplier *
       vp9_convert_qindex_to_q(cm->base_qindex, cm->bit_depth));
-  int64_t threshold = threshold_base;
-  int64_t threshold_bsize_min = threshold_base << 6;
-  int64_t threshold_bsize_max = threshold_base;
+  threshold = threshold_base;
+  threshold_bsize_min = threshold_base << 6;
+  threshold_bsize_max = threshold_base;
+
   // Modify thresholds for key frame and for low-resolutions (set lower
   // thresholds to favor split).
   if (cm->frame_type == KEY_FRAME) {
@@ -512,7 +517,6 @@
     threshold_bsize_max = threshold_base >> 2;
   }
 
-  vp9_clear_system_state();
   set_offsets(cpi, tile, x, mi_row, mi_col, BLOCK_64X64);
 
   if (xd->mb_to_right_edge < 0)