Reland "Add IvfVideoFrameGenerator"

This is a reland of 712a26f3842b4eba1f38c3ba7371b1cf771fd232

Original change's description:
> Add IvfVideoFrameGenerator
> 
> Bug: webrtc:10138
> Change-Id: Iea590f334d22fb7d22077c9bdd3b5ba79691df2e
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160185
> Commit-Queue: Artem Titov <titovartem@webrtc.org>
> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#29902}

Bug: webrtc:10138
Change-Id: If522d079f0a1e30d6f2b330792aa1d1fc043b8b8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160418
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29913}
diff --git a/test/BUILD.gn b/test/BUILD.gn
index f2e21ce..7656ecc 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -292,6 +292,8 @@
     sources = [
       "testsupport/frame_reader.h",
       "testsupport/frame_writer.h",
+      "testsupport/ivf_video_frame_generator.cc",
+      "testsupport/ivf_video_frame_generator.h",
       "testsupport/mock/mock_frame_reader.h",
       "testsupport/video_frame_writer.cc",
       "testsupport/video_frame_writer.h",
@@ -306,13 +308,25 @@
       ":test_support",
       ":video_test_common",
       "../api:scoped_refptr",
+      "../api/video:encoded_image",
       "../api/video:video_frame",
       "../api/video:video_frame_i420",
+      "../api/video_codecs:video_codecs_api",
       "../common_video",
+      "../media:rtc_media_base",
+      "../modules/video_coding:video_codec_interface",
+      "../modules/video_coding:video_coding_utility",
+      "../modules/video_coding:webrtc_h264",
+      "../modules/video_coding:webrtc_vp8",
+      "../modules/video_coding:webrtc_vp9",
       "../rtc_base:checks",
       "../rtc_base:criticalsection",
       "../rtc_base:logging",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:rtc_event",
+      "../rtc_base/synchronization:sequence_checker",
+      "../rtc_base/system:file_wrapper",
+      "//third_party/abseil-cpp/absl/types:optional",
     ]
 
     if (!is_ios) {
@@ -379,15 +393,28 @@
       "../api:scoped_refptr",
       "../api:simulcast_test_fixture_api",
       "../api/test/video:function_video_factory",
+      "../api/video:encoded_image",
       "../api/video:video_frame",
       "../api/video:video_frame_i420",
+      "../api/video_codecs:video_codecs_api",
       "../call:video_stream_api",
+      "../common_video",
+      "../media:rtc_media_base",
       "../modules/rtp_rtcp",
+      "../modules/rtp_rtcp:rtp_rtcp_format",
       "../modules/video_coding:simulcast_test_fixture_impl",
+      "../modules/video_coding:video_codec_interface",
+      "../modules/video_coding:video_coding_utility",
+      "../modules/video_coding:webrtc_h264",
+      "../modules/video_coding:webrtc_vp8",
+      "../modules/video_coding:webrtc_vp9",
+      "../rtc_base:criticalsection",
+      "../rtc_base:rtc_event",
       "../rtc_base/system:file_wrapper",
       "time_controller:time_controller",
       "//third_party/abseil-cpp/absl/flags:flag",
       "//third_party/abseil-cpp/absl/strings",
+      "//third_party/abseil-cpp/absl/types:optional",
     ]
     sources = [
       "call_config_utils_unittest.cc",
@@ -397,6 +424,7 @@
       "frame_generator_unittest.cc",
       "rtp_file_reader_unittest.cc",
       "rtp_file_writer_unittest.cc",
+      "testsupport/ivf_video_frame_generator_unittest.cc",
       "testsupport/perf_test_unittest.cc",
       "testsupport/test_artifacts_unittest.cc",
       "testsupport/video_frame_writer_unittest.cc",