]> granicus.if.org Git - libvpx/commitdiff
Fix crash with vp9 denoiser on.
authorMarco <marpan@google.com>
Fri, 13 Mar 2015 00:19:43 +0000 (17:19 -0700)
committerMarco <marpan@google.com>
Fri, 13 Mar 2015 18:10:02 +0000 (11:10 -0700)
Crash occured on very first key frame, because denoiser
temporal function was beng entered.

Updated denoiser unittest to set cpu_used from first frame,
and verified fix fixes the crash.

Change-Id: I3be1124b52846fbbe7248d2c3d6136e086c80bc1

test/datarate_test.cc
vp9/encoder/vp9_encodeframe.c

index 94efeae97ac6e99096bd770a18ac06eff4402108..fc9e1f425fd340e06243ce4a748a358c090b5057 100644 (file)
@@ -44,9 +44,8 @@ class DatarateTestLarge : public ::libvpx_test::EncoderTest,
 
   virtual void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
                                   ::libvpx_test::Encoder *encoder) {
-    if (video->frame() == 1) {
+    if (video->frame() == 0)
       encoder->Control(VP8E_SET_NOISE_SENSITIVITY, denoiser_on_);
-    }
 
     if (denoiser_offon_test_) {
       ASSERT_GT(denoiser_offon_period_, 0)
@@ -353,7 +352,7 @@ class DatarateTestVP9Large : public ::libvpx_test::EncoderTest,
 
   virtual void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
                                   ::libvpx_test::Encoder *encoder) {
-    if (video->frame() == 1)
+    if (video->frame() == 0)
       encoder->Control(VP8E_SET_CPUUSED, set_cpu_used_);
 
     if (denoiser_offon_test_) {
@@ -368,7 +367,7 @@ class DatarateTestVP9Large : public ::libvpx_test::EncoderTest,
     encoder->Control(VP9E_SET_NOISE_SENSITIVITY, denoiser_on_);
 
     if (cfg_.ts_number_layers > 1) {
-      if (video->frame() == 1) {
+      if (video->frame() == 0) {
         encoder->Control(VP9E_SET_SVC, 1);
       }
       vpx_svc_layer_id_t layer_id = {0, 0};
@@ -376,9 +375,7 @@ class DatarateTestVP9Large : public ::libvpx_test::EncoderTest,
       frame_flags_ = SetFrameFlags(video->frame(), cfg_.ts_number_layers);
       layer_id.temporal_layer_id = SetLayerId(video->frame(),
                                               cfg_.ts_number_layers);
-      if (video->frame() > 0) {
-       encoder->Control(VP9E_SET_SVC_LAYER_ID, &layer_id);
-      }
+      encoder->Control(VP9E_SET_SVC_LAYER_ID, &layer_id);
     }
     const vpx_rational_t tb = video->timebase();
     timebase_ = static_cast<double>(tb.num) / tb.den;
index 18a3734a7843b91d047ad18095f0dd17b1b6e81c..724d0e7617650de9e21ec5e95349d3896e69bad1 100644 (file)
@@ -1592,7 +1592,8 @@ static void encode_b_rt(VP9_COMP *cpi, ThreadData *td,
   update_state_rt(cpi, td, ctx, mi_row, mi_col, bsize);
 
 #if CONFIG_VP9_TEMPORAL_DENOISING
-  if (cpi->oxcf.noise_sensitivity > 0 && output_enabled) {
+  if (cpi->oxcf.noise_sensitivity > 0 && output_enabled &&
+      cpi->common.frame_type != KEY_FRAME) {
     vp9_denoiser_denoise(&cpi->denoiser, x, mi_row, mi_col,
                          MAX(BLOCK_8X8, bsize), ctx);
   }