Add counter to the end of FakeEncoder frames in order to make them unique.

Bug: none
Change-Id: Ia5dccbe1868cc3fda5693d7e13eac21f75a08b83
Reviewed-on: https://webrtc-review.googlesource.com/c/109582
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25536}
diff --git a/test/fake_encoder.cc b/test/fake_encoder.cc
index 6ce756b..4736870 100644
--- a/test/fake_encoder.cc
+++ b/test/fake_encoder.cc
@@ -23,7 +23,7 @@
 
 namespace webrtc {
 namespace test {
-
+namespace {
 const int kKeyframeSizeFactor = 5;
 
 // Inverse of proportion of frames assigned to each temporal layer for all
@@ -35,12 +35,22 @@
     {8, 8, 4, 2},  // 1/8 + 1/8 + 1/4 + 1/2
 };
 
+void WriteCounter(unsigned char* payload, uint32_t counter) {
+  payload[0] = (counter & 0x00FF);
+  payload[1] = (counter & 0xFF00) >> 8;
+  payload[2] = (counter & 0xFF0000) >> 16;
+  payload[3] = (counter & 0xFF000000) >> 24;
+}
+
+};  // namespace
+
 FakeEncoder::FakeEncoder(Clock* clock)
     : clock_(clock),
       callback_(nullptr),
       configured_input_framerate_(-1),
       max_target_bitrate_kbps_(-1),
       pending_keyframe_(true),
+      counter_(0),
       debt_bytes_(0) {
   // Generate some arbitrary not-all-zero data
   for (size_t i = 0; i < sizeof(encoded_buffer_); ++i) {
@@ -80,6 +90,7 @@
   int framerate;
   VideoCodecMode mode;
   bool keyframe;
+  uint32_t counter;
   {
     rtc::CritScope cs(&crit_sect_);
     max_framerate = config_.maxFramerate;
@@ -97,13 +108,14 @@
     }
     keyframe = pending_keyframe_;
     pending_keyframe_ = false;
+    counter = counter_++;
   }
 
   FrameInfo frame_info =
       NextFrame(frame_types, keyframe, num_simulcast_streams, target_bitrate,
                 simulcast_streams, framerate);
   for (uint8_t i = 0; i < frame_info.layers.size(); ++i) {
-    constexpr int kMinPayLoadLength = 10;
+    constexpr int kMinPayLoadLength = 14;
     if (frame_info.layers[i].size < kMinPayLoadLength) {
       // Drop this temporal layer.
       continue;
@@ -114,7 +126,10 @@
     specifics.codecType = kVideoCodecGeneric;
     std::unique_ptr<uint8_t[]> encoded_buffer(
         new uint8_t[frame_info.layers[i].size]);
-    memcpy(encoded_buffer.get(), encoded_buffer_, frame_info.layers[i].size);
+    memcpy(encoded_buffer.get(), encoded_buffer_,
+           frame_info.layers[i].size - 4);
+    // Write a counter to the image to make each frame unique.
+    WriteCounter(encoded_buffer.get() + frame_info.layers[i].size - 4, counter);
     EncodedImage encoded(encoded_buffer.get(), frame_info.layers[i].size,
                          sizeof(encoded_buffer_));
     encoded.SetTimestamp(input_image.timestamp());