]> granicus.if.org Git - libvpx/commitdiff
realtime_test: add IntegerOverflow test
authorJames Zern <jzern@google.com>
Tue, 21 Apr 2020 02:30:24 +0000 (19:30 -0700)
committerJames Zern <jzern@google.com>
Tue, 21 Apr 2020 22:14:34 +0000 (15:14 -0700)
use an extreme bitrate to cover rate control calculations.
this is disabled by default as there are a mix of
-fsanitize=undefined/integer warnings for vp9 and -fsanitize=integer
warnings for vp8.

this is a follow-up to:
5e065cf9d vp8/{ratectrl,onyx_if}: fix some signed integer overflows
5eab093a7 vp9_ratectrl: fix some signed integer overflows

BUG=webm:1685

Change-Id: I24d223e33471217528a79b0088965ba51d0399ba

test/realtime_test.cc

index 63f1ac3c2957d0cd0e6dd3a56e6f0d54cda43fcb..11b5cae70c10e4f69e3a0ab4db51638f35f56f7a 100644 (file)
@@ -40,6 +40,14 @@ class RealtimeTest
     // which overrides the one specified in SetUp() above.
     cfg_.g_pass = VPX_RC_FIRST_PASS;
   }
+
+  virtual void PreEncodeFrameHook(::libvpx_test::VideoSource *video,
+                                  ::libvpx_test::Encoder *encoder) {
+    if (video->frame() == 0) {
+      encoder->Control(VP8E_SET_CPUUSED, 8);
+    }
+  }
+
   virtual void FramePktHook(const vpx_codec_cx_pkt_t * /*pkt*/) {
     frame_packets_++;
   }
@@ -55,6 +63,19 @@ TEST_P(RealtimeTest, RealtimeFirstPassProducesFrames) {
   EXPECT_EQ(kFramesToEncode, frame_packets_);
 }
 
+// TODO(https://crbug.com/webm/1685): the following passes -fsanitize=undefined
+// with bitrate set to 140000000 for vp8 and 128000 for vp9. There are
+// additional failures with lower bitrates using -fsanitize=integer.
+TEST_P(RealtimeTest, DISABLED_IntegerOverflow) {
+  ::libvpx_test::RandomVideoSource video;
+  video.SetSize(800, 480);
+  video.set_limit(20);
+  // TODO(https://crbug.com/webm/1685): this should be silently capped
+  // internally to the raw yuv rate or below.
+  cfg_.rc_target_bitrate = 140000000;
+  ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
+}
+
 VP8_INSTANTIATE_TEST_CASE(RealtimeTest,
                           ::testing::Values(::libvpx_test::kRealTime));
 VP9_INSTANTIATE_TEST_CASE(RealtimeTest,