shithub: libvpx

Download patch

ref: a8015e217ef0aadbe389ef08e409605843888ed9
parent: 5c02f88a813fe3fd1ea6eeeba954cdfd4e113f7f
parent: 3f42d10805d5ba5480236ec163776e5a49f6cf7c
author: Yaowu Xu <[email protected]>
date: Tue May 12 19:20:35 EDT 2015

Merge "Protect new metric computation with use_highbitdepth flag"

--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -4216,7 +4216,7 @@
           vp9_clear_system_state();
 
 #if CONFIG_VP9_HIGHBITDEPTH
-          calc_highbd_psnr(orig, pp, &psnr, cpi->td.mb.e_mbd.bd,
+          calc_highbd_psnr(orig, pp, &psnr2, cpi->td.mb.e_mbd.bd,
                            cpi->oxcf.input_bit_depth);
 #else
           calc_psnr(orig, pp, &psnr2);
@@ -4267,31 +4267,38 @@
         }
       }
       if (cpi->b_calculate_blockiness) {
-        double frame_blockiness = vp9_get_blockiness(
-            cpi->Source->y_buffer, cpi->Source->y_stride,
-            cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride,
-            cpi->Source->y_width, cpi->Source->y_height);
-        cpi->worst_blockiness = MAX(cpi->worst_blockiness, frame_blockiness);
-        cpi->total_blockiness += frame_blockiness;
+#if CONFIG_VP9_HIGHBITDEPTH
+        if (!cm->use_highbitdepth)
+#endif
+        {
+          double frame_blockiness = vp9_get_blockiness(
+              cpi->Source->y_buffer, cpi->Source->y_stride,
+              cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride,
+              cpi->Source->y_width, cpi->Source->y_height);
+          cpi->worst_blockiness = MAX(cpi->worst_blockiness, frame_blockiness);
+          cpi->total_blockiness += frame_blockiness;
+        }
       }
 
       if (cpi->b_calculate_consistency) {
-        double this_inconsistency = vp9_get_ssim_metrics(
-            cpi->Source->y_buffer, cpi->Source->y_stride,
-            cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride,
-            cpi->Source->y_width, cpi->Source->y_height, cpi->ssim_vars,
-            &cpi->metrics, 1);
+#if CONFIG_VP9_HIGHBITDEPTH
+        if (!cm->use_highbitdepth)
+#endif
+        {
+          double this_inconsistency = vp9_get_ssim_metrics(
+              cpi->Source->y_buffer, cpi->Source->y_stride,
+              cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride,
+              cpi->Source->y_width, cpi->Source->y_height, cpi->ssim_vars,
+              &cpi->metrics, 1);
 
-        const double peak = (double)((1 << cpi->oxcf.input_bit_depth) - 1);
-
-
-        double consistency = vpx_sse_to_psnr(samples, peak,
+          const double peak = (double)((1 << cpi->oxcf.input_bit_depth) - 1);
+          double consistency = vpx_sse_to_psnr(samples, peak,
                                              (double)cpi->total_inconsistency);
-
-        if (consistency > 0.0)
-          cpi->worst_consistency = MIN(cpi->worst_consistency,
-                                       consistency);
-        cpi->total_inconsistency += this_inconsistency;
+          if (consistency > 0.0)
+            cpi->worst_consistency = MIN(cpi->worst_consistency,
+                                         consistency);
+          cpi->total_inconsistency += this_inconsistency;
+        }
       }
 
       if (cpi->b_calculate_ssimg) {
@@ -4309,6 +4316,9 @@
 #endif  // CONFIG_VP9_HIGHBITDEPTH
         adjust_image_stat(y, u, v, frame_all, &cpi->ssimg);
       }
+#if CONFIG_VP9_HIGHBITDEPTH
+      if (!cm->use_highbitdepth)
+#endif
       {
         double y, u, v, frame_all;
         frame_all = vp9_calc_fastssim(cpi->Source, cm->frame_to_show, &y, &u,
@@ -4316,6 +4326,9 @@
         adjust_image_stat(y, u, v, frame_all, &cpi->fastssim);
         /* TODO(JBB): add 10/12 bit support */
       }
+#if CONFIG_VP9_HIGHBITDEPTH
+      if (!cm->use_highbitdepth)
+#endif
       {
         double y, u, v, frame_all;
         frame_all = vp9_psnrhvs(cpi->Source, cm->frame_to_show, &y, &u, &v);