iOS: Add new RTCVideoSource interface

The new RTCVideoSource interface can be used by custom implementations of RTCVideoCapturer.

BUG=webrtc:7177
TBR=tommi

Review-Url: https://codereview.webrtc.org/2745193002
Cr-Commit-Position: refs/heads/master@{#17409}
diff --git a/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.h b/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.h
new file mode 100644
index 0000000..0b1e4ba
--- /dev/null
+++ b/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.h
@@ -0,0 +1,51 @@
+/*
+ *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_OBJCVIDEOTRACKSOURCE_H_
+#define WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_OBJCVIDEOTRACKSOURCE_H_
+
+#import <WebRTC/RTCVideoFrame.h>
+
+#include "webrtc/base/timestampaligner.h"
+#include "webrtc/media/base/adaptedvideotracksource.h"
+
+namespace webrtc {
+
+class ObjcVideoTrackSource : public rtc::AdaptedVideoTrackSource {
+ public:
+  ObjcVideoTrackSource();
+
+  // This class can not be used for implementing screen casting. Hopefully, this
+  // function will be removed before we add that to iOS/Mac.
+  bool is_screencast() const override { return false; }
+
+  // Indicates that the encoder should denoise video before encoding it.
+  // If it is not set, the default configuration is used which is different
+  // depending on video codec.
+  rtc::Optional<bool> needs_denoising() const override {
+    return rtc::Optional<bool>(false);
+  }
+
+  SourceState state() const override { return SourceState::kLive; }
+
+  bool remote() const override { return false; }
+
+  // Called by RTCVideoSource.
+  void OnCapturedFrame(RTCVideoFrame* frame);
+  void OnOutputFormatRequest(int width, int height, int fps);
+
+ private:
+  rtc::VideoBroadcaster broadcaster_;
+  rtc::TimestampAligner timestamp_aligner_;
+};
+
+}  // namespace webrtc
+
+#endif  // WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_OBJCVIDEOTRACKSOURCE_H_