Add support for writing raw encoder output to .ivf files.

Also refactor GenericEncoder to use these file writers, and remove use
of preprocessor to enable file writing.

BUG=

Review URL: https://codereview.webrtc.org/1853813002

Cr-Commit-Position: refs/heads/master@{#12372}
diff --git a/webrtc/modules/video_coding/video_coding_impl.cc b/webrtc/modules/video_coding/video_coding_impl.cc
index e5f0ee1..ee03753 100644
--- a/webrtc/modules/video_coding/video_coding_impl.cc
+++ b/webrtc/modules/video_coding/video_coding_impl.cc
@@ -14,6 +14,7 @@
 
 #include "webrtc/common_types.h"
 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
+#include "webrtc/base/criticalsection.h"
 #include "webrtc/modules/video_coding/include/video_codec_interface.h"
 #include "webrtc/modules/video_coding/encoded_frame.h"
 #include "webrtc/modules/video_coding/jitter_buffer.h"
@@ -77,7 +78,8 @@
                         VideoEncoderRateObserver* encoder_rate_observer,
                         VCMQMSettingsCallback* qm_settings_callback,
                         NackSender* nack_sender,
-                        KeyFrameRequestSender* keyframe_request_sender)
+                        KeyFrameRequestSender* keyframe_request_sender,
+                        EncodedImageCallback* pre_decode_image_callback)
       : VideoCodingModule(),
         sender_(clock,
                 &post_encode_callback_,
@@ -85,6 +87,7 @@
                 qm_settings_callback),
         receiver_(clock,
                   event_factory,
+                  pre_decode_image_callback,
                   nack_sender,
                   keyframe_request_sender),
         own_event_factory_(owns_event_factory ? event_factory : NULL) {}
@@ -273,10 +276,6 @@
     return receiver_.SetReceiveChannelParameters(rtt);
   }
 
-  void RegisterPreDecodeImageCallback(EncodedImageCallback* observer) override {
-    receiver_.RegisterPreDecodeImageCallback(observer);
-  }
-
   void RegisterPostEncodeImageCallback(
       EncodedImageCallback* observer) override {
     post_encode_callback_.Register(observer);
@@ -305,7 +304,8 @@
   return VideoCodingModule::Create(clock, encoder_rate_observer,
                                    qm_settings_callback,
                                    nullptr,   // NackSender
-                                   nullptr);  // KeyframeRequestSender
+                                   nullptr,   // KeyframeRequestSender
+                                   nullptr);  // Pre-decode image callback
 }
 
 // Create method for the new jitter buffer.
@@ -314,11 +314,12 @@
     VideoEncoderRateObserver* encoder_rate_observer,
     VCMQMSettingsCallback* qm_settings_callback,
     NackSender* nack_sender,
-    KeyFrameRequestSender* keyframe_request_sender) {
+    KeyFrameRequestSender* keyframe_request_sender,
+    EncodedImageCallback* pre_decode_image_callback) {
   return new VideoCodingModuleImpl(clock, new EventFactoryImpl, true,
                                    encoder_rate_observer, qm_settings_callback,
-                                   nack_sender,
-                                   keyframe_request_sender);
+                                   nack_sender, keyframe_request_sender,
+                                   pre_decode_image_callback);
 }
 
 // Create method for current interface, will be removed when the
@@ -340,7 +341,7 @@
   assert(event_factory);
   return new VideoCodingModuleImpl(clock, event_factory, false, nullptr,
                                    nullptr, nack_sender,
-                                   keyframe_request_sender);
+                                   keyframe_request_sender, nullptr);
 }
 
 }  // namespace webrtc