Enable capturing from camera in PC framework

Bug: webrtc:10138
Change-Id: Idcf10331b9f5208010b2bd29324e0fc1341db2d3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156241
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29431}
diff --git a/test/test_video_capturer.h b/test/test_video_capturer.h
index 0f1886b..114767a 100644
--- a/test/test_video_capturer.h
+++ b/test/test_video_capturer.h
@@ -18,18 +18,29 @@
 #include "api/video/video_source_interface.h"
 #include "media/base/video_adapter.h"
 #include "media/base/video_broadcaster.h"
+#include "rtc_base/critical_section.h"
 
 namespace webrtc {
 namespace test {
 
 class TestVideoCapturer : public rtc::VideoSourceInterface<VideoFrame> {
  public:
-  TestVideoCapturer();
+  class FramePreprocessor {
+   public:
+    virtual ~FramePreprocessor() = default;
+
+    virtual VideoFrame Preprocess(const VideoFrame& frame) = 0;
+  };
+
   ~TestVideoCapturer() override;
 
   void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
                        const rtc::VideoSinkWants& wants) override;
   void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override;
+  void SetFramePreprocessor(std::unique_ptr<FramePreprocessor> preprocessor) {
+    rtc::CritScope crit(&lock_);
+    preprocessor_ = std::move(preprocessor);
+  }
 
  protected:
   void OnFrame(const VideoFrame& frame);
@@ -37,7 +48,10 @@
 
  private:
   void UpdateVideoAdapter();
+  VideoFrame MaybePreprocess(const VideoFrame& frame);
 
+  rtc::CriticalSection lock_;
+  std::unique_ptr<FramePreprocessor> preprocessor_ RTC_GUARDED_BY(lock_);
   rtc::VideoBroadcaster broadcaster_;
   cricket::VideoAdapter video_adapter_;
 };