shithub: libvpx

Download patch

ref: a6238a1085a6543c8a79bd1c9b9b8456d5e04f4b
parent: 320fb4c34a6d6bed560fbe564e7e1eae328be100
author: angiebird <angiebird@google.com>
date: Thu Feb 20 11:16:38 EST 2020

Use ObserveGroupOfPicture() in EncodeFrame test

In the previous version, we assume the number of coding frames is
known.

Although the assumption is true for now with rate_ctrl flag on,
it's more proper to use ObserveGroupOfPicture() to get
the partial info about how many coding frames are in the group.

Because We want to keep the flexibility of changing the size of
group of pictures on the fly in the future.

Change-Id: Ibbe6ab49268c468bf1cef8344efd3a3e1eab972a

--- a/test/simple_encode_test.cc
+++ b/test/simple_encode_test.cc
@@ -70,35 +70,31 @@
   simple_encode.ComputeFirstPassStats();
   int num_coding_frames = simple_encode.GetCodingFrameNum();
   EXPECT_GE(num_coding_frames, num_frames);
-  // The coding frames include actual show frames and alternate reference
-  // frames, i.e. no show frame.
-  int ref_num_alternate_refereces = num_coding_frames - num_frames;
-  int num_alternate_refereces = 0;
   simple_encode.StartEncode();
   size_t total_data_bit_size = 0;
-  for (int i = 0; i < num_coding_frames; ++i) {
-    EncodeFrameResult encode_frame_result;
-    simple_encode.EncodeFrame(&encode_frame_result);
-    if (i == 0) {
-      EXPECT_EQ(encode_frame_result.show_idx, 0);
-      EXPECT_EQ(encode_frame_result.frame_type, kKeyFrame)
-          << "The first coding frame should be key frame";
+  int coded_show_frame_count = 0;
+  int coded_frame_index = 0;
+  while (coded_show_frame_count < num_frames) {
+    const GroupOfPicture group_of_picture =
+        simple_encode.ObserveGroupOfPicture();
+    for (size_t i = 0; i < group_of_picture.encode_frame_list.size(); ++i) {
+      EncodeFrameResult encode_frame_result;
+      simple_encode.EncodeFrame(&encode_frame_result);
+      if (coded_frame_index == 0) {
+        EXPECT_EQ(encode_frame_result.show_idx, 0);
+        EXPECT_EQ(encode_frame_result.frame_type, kKeyFrame)
+            << "The first coding frame should be a key frame";
+      }
+      EXPECT_GE(encode_frame_result.show_idx, 0);
+      EXPECT_LT(encode_frame_result.show_idx, num_frames);
+      EXPECT_GE(encode_frame_result.psnr, 34)
+          << "The psnr is supposed to be greater than 34 given the "
+             "target_bitrate 1000 kbps";
+      total_data_bit_size += encode_frame_result.coding_data_bit_size;
+      ++coded_frame_index;
     }
-    if (encode_frame_result.frame_type == kAlternateReference) {
-      ++num_alternate_refereces;
-    }
-    EXPECT_GE(encode_frame_result.show_idx, 0);
-    EXPECT_LT(encode_frame_result.show_idx, num_frames);
-    if (i == num_coding_frames - 1) {
-      EXPECT_EQ(encode_frame_result.show_idx, num_frames - 1)
-          << "The last coding frame should be the last display order";
-    }
-    EXPECT_GE(encode_frame_result.psnr, 34)
-        << "The psnr is supposed to be greater than 34 given the "
-           "target_bitrate 1000 kbps";
-    total_data_bit_size += encode_frame_result.coding_data_bit_size;
+    coded_show_frame_count += group_of_picture.show_frame_count;
   }
-  EXPECT_EQ(num_alternate_refereces, ref_num_alternate_refereces);
   const double bitrate = GetBitrateInKbps(total_data_bit_size, num_frames,
                                           frame_rate_num, frame_rate_den);
   const double off_target_threshold = 150;