rt: Add threading to realtime end2end test.

Add new test clip.

Change-Id: Ie2891a553b90322a14df4ad1c9ebe3f236d723cd
diff --git a/test/rt_end_to_end_test.cc b/test/rt_end_to_end_test.cc
index 4f2940f..533dd6b 100644
--- a/test/rt_end_to_end_test.cc
+++ b/test/rt_end_to_end_test.cc
@@ -26,7 +26,7 @@
 
 // List of psnr thresholds for speed settings 0-8
 const double kPsnrThreshold[9] = { 37.0, 36.9, 36.8, 36.7, 36.5,
-                                   36.3, 35.8, 35.3, 34.8 };
+                                   36.3, 35.8, 35.2, 34.8 };
 
 typedef struct {
   const char *filename;
@@ -46,17 +46,18 @@
 // TODO(kyslov): Add more test vectors
 const TestVideoParam kTestVectors[] = {
   { "park_joy_90p_8_420.y4m", 8, AOM_IMG_FMT_I420, AOM_BITS_8, 0 },
+  { "paris_352_288_30.y4m", 8, AOM_IMG_FMT_I420, AOM_BITS_8, 0 },
 };
 
 class RTEndToEndTest
-    : public ::libaom_test::CodecTestWith3Params<TestVideoParam, int,
-                                                 unsigned int>,
+    : public ::libaom_test::CodecTestWith4Params<TestVideoParam, int,
+                                                 unsigned int, int>,
       public ::libaom_test::EncoderTest {
  protected:
   RTEndToEndTest()
       : EncoderTest(GET_PARAM(0)), test_video_param_(GET_PARAM(1)),
         cpu_used_(GET_PARAM(2)), psnr_(0.0), nframes_(0),
-        aq_mode_(GET_PARAM(3)) {}
+        aq_mode_(GET_PARAM(3)), threads_(GET_PARAM(4)) {}
 
   virtual ~RTEndToEndTest() {}
 
@@ -67,6 +68,7 @@
     cfg_.g_usage =
         AOM_USAGE_REALTIME;  // TODO(kyslov): Move it to encode_test_driver.cc
     cfg_.rc_end_usage = AOM_CBR;
+    cfg_.g_threads = threads_;
     cfg_.rc_buf_sz = 1000;
     cfg_.rc_buf_initial_sz = 500;
     cfg_.rc_buf_optimal_sz = 600;
@@ -86,10 +88,11 @@
                                   ::libaom_test::Encoder *encoder) {
     if (video->frame() == 0) {
       encoder->Control(AV1E_SET_FRAME_PARALLEL_DECODING, 1);
-      encoder->Control(AV1E_SET_TILE_COLUMNS, 1);
+      encoder->Control(AV1E_SET_TILE_COLUMNS, threads_);
       encoder->Control(AOME_SET_CPUUSED, cpu_used_);
       encoder->Control(AV1E_SET_TUNE_CONTENT, AOM_CONTENT_DEFAULT);
       encoder->Control(AV1E_SET_AQ_MODE, aq_mode_);
+      encoder->Control(AV1E_SET_ROW_MT, 1);
     }
   }
 
@@ -127,20 +130,44 @@
   double psnr_;
   unsigned int nframes_;
   unsigned int aq_mode_;
+  unsigned int threads_;
 };
 
+// *Threaded* and *Large* tests are used to simplify test filtering.
 class RTEndToEndTestLarge : public RTEndToEndTest {};
 
+class RTEndToEndTestThreadedLarge : public RTEndToEndTest {};
+
+class RTEndToEndTestThreaded : public RTEndToEndTest {};
+
 TEST_P(RTEndToEndTestLarge, EndtoEndPSNRTest) { DoTest(); }
 
+TEST_P(RTEndToEndTestThreadedLarge, EndtoEndPSNRTest) { DoTest(); }
+
 TEST_P(RTEndToEndTest, EndtoEndPSNRTest) { DoTest(); }
 
+TEST_P(RTEndToEndTestThreaded, EndtoEndPSNRTest) { DoTest(); }
+
 AV1_INSTANTIATE_TEST_CASE(RTEndToEndTestLarge,
                           ::testing::ValuesIn(kTestVectors),
                           ::testing::Range(0, 7),
-                          ::testing::Values<unsigned int>(0));
+                          ::testing::Values<unsigned int>(0),
+                          ::testing::Values(1));
+
+AV1_INSTANTIATE_TEST_CASE(RTEndToEndTestThreadedLarge,
+                          ::testing::ValuesIn(kTestVectors),
+                          ::testing::Range(0, 7),
+                          ::testing::Values<unsigned int>(0),
+                          ::testing::Values(2, 5));
 
 AV1_INSTANTIATE_TEST_CASE(RTEndToEndTest, ::testing::Values(kTestVectors[0]),
                           ::testing::Range(7, 9),
-                          ::testing::Range<unsigned int>(0, 4));
+                          ::testing::Range<unsigned int>(0, 4),
+                          ::testing::Values(1));
+
+AV1_INSTANTIATE_TEST_CASE(RTEndToEndTestThreaded,
+                          ::testing::Values(kTestVectors[1]),
+                          ::testing::Range(7, 9),
+                          ::testing::Range<unsigned int>(0, 4),
+                          ::testing::Range(2, 5));
 }  // namespace
diff --git a/test/test-data.sha1 b/test/test-data.sha1
index bd63206..31d85bf 100644
--- a/test/test-data.sha1
+++ b/test/test-data.sha1
@@ -538,3 +538,4 @@
 bff316e63ded5559116bdc2fa4aa97ad7b1a1761 *av1-1-b8-05-mv.ivf.md5
 b48a717c7c003b8dd23c3c2caed1ac673380fdb3 *av1-1-b8-06-mfmv.ivf
 1424e3cb53e00eb56b94f4c725826274212c42b6 *av1-1-b8-06-mfmv.ivf.md5
+f8724ed96272ddbc35776908f2df7cb9955766a9 *paris_352_288_30.y4m
diff --git a/test/test_data_util.cmake b/test/test_data_util.cmake
index c3c86aa..e497efa 100644
--- a/test/test_data_util.cmake
+++ b/test/test_data_util.cmake
@@ -12,6 +12,7 @@
 list(APPEND AOM_TEST_DATA_FILE_NAMES
             "hantro_collage_w352h288.yuv"
             "hantro_odd.yuv"
+            "paris_352_288_30.y4m"
             "park_joy_90p_10_420.y4m"
             "park_joy_90p_10_422.y4m"
             "park_joy_90p_10_444.y4m"