Fix native api in preparation for native_api example.

Add native api conversions for video frames and video renderer. This
also requires some changes to sdk/BUILD to avoid cyclic dependencies.

Bug: webrtc:8832
Change-Id: Ibf21e63bdcae195dcb61d63f9262e6a8dc4fa790
Reviewed-on: https://webrtc-review.googlesource.com/57142
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22340}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 9c86306..1ef7de2 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -121,17 +121,17 @@
       }
     }
 
-    # Keep videotracksource related code in a separate target so that we can
-    # build PeerConnectionFactory without audio/video support when that's called
-    # for.
-    rtc_static_library("videotracksource_objc") {
+    rtc_static_library("videosource_objc") {
       sources = [
-        "objc/Framework/Classes/Video/objcvideotracksource.h",
-        "objc/Framework/Classes/Video/objcvideotracksource.mm",
+        "objc/Framework/Classes/PeerConnection/RTCVideoSource+Private.h",
+        "objc/Framework/Classes/PeerConnection/RTCVideoSource.mm",
+        "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
       ]
 
       deps = [
         ":common_objc",
+        ":mediasource_objc",
+        ":native_video",
         ":videoframebuffer_objc",
         "../api:libjingle_peerconnection_api",
         "../api:video_frame_api",
@@ -153,17 +153,12 @@
 
     rtc_static_library("videoframebuffer_objc") {
       sources = [
-        "objc/Framework/Classes/PeerConnection/RTCVideoFrame+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCVideoFrame.mm",
         "objc/Framework/Classes/Video/RTCCVPixelBuffer.mm",
         "objc/Framework/Classes/Video/RTCI420Buffer+Private.h",
         "objc/Framework/Classes/Video/RTCI420Buffer.mm",
         "objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
         "objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h",
-        "objc/Framework/Native/api/video_frame_buffer.h",
-        "objc/Framework/Native/api/video_frame_buffer.mm",
-        "objc/Framework/Native/src/objc_frame_buffer.h",
-        "objc/Framework/Native/src/objc_frame_buffer.mm",
       ]
       deps = [
         ":common_objc",
@@ -214,7 +209,7 @@
         ":mediaconstraints_objc",
         ":native_video",
         ":videoframebuffer_objc",
-        ":videotracksource_objc",
+        ":videosource_objc",
         "../api:libjingle_peerconnection_api",
         "../api:optional",
         "../api:video_frame_api",
@@ -291,6 +286,7 @@
           ":peerconnectionfactory_base_objc",
           ":video_objc",
           ":videoframebuffer_objc",
+          ":videorenderer_objc",
           "../api:video_frame_api",
           "../rtc_base:checks",
           "../rtc_base:rtc_base_approved",
@@ -398,7 +394,7 @@
       }
 
       deps = [
-        ":native_video",
+        ":wrapped_native_codec_objc",
         "../modules/video_coding:webrtc_vp8",
         "../system_wrappers:metrics_default",
       ]
@@ -419,7 +415,7 @@
       }
 
       deps = [
-        ":native_video",
+        ":wrapped_native_codec_objc",
         "../modules/video_coding:webrtc_vp9",
         "../system_wrappers:metrics_default",
       ]
@@ -476,6 +472,53 @@
       ]
     }
 
+    rtc_source_set("videorenderer_objc") {
+      sources = [
+        "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
+      ]
+
+      configs += [ "..:common_objc" ]
+      visibility = [ "*" ]
+      public_configs = [ ":common_config_objc" ]
+    }
+
+    rtc_static_library("videorendereradapter_objc") {
+      sources = [
+        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter+Private.h",
+        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h",
+        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.mm",
+      ]
+
+      configs += [ "..:common_objc" ]
+      visibility = [ "*" ]
+      public_configs = [ ":common_config_objc" ]
+
+      deps = [
+        ":common_objc",
+        ":native_api",
+        ":videoframebuffer_objc",
+        ":videorenderer_objc",
+        "../api:libjingle_peerconnection_api",
+      ]
+    }
+
+    rtc_static_library("mediasource_objc") {
+      sources = [
+        "objc/Framework/Classes/PeerConnection/RTCMediaSource+Private.h",
+        "objc/Framework/Classes/PeerConnection/RTCMediaSource.mm",
+        "objc/Framework/Headers/WebRTC/RTCMediaSource.h",
+      ]
+
+      configs += [ "..:common_objc" ]
+      public_configs = [ ":common_config_objc" ]
+
+      deps = [
+        ":common_objc",
+        "../api:libjingle_peerconnection_api",
+        "../rtc_base:checks",
+      ]
+    }
+
     rtc_static_library("peerconnectionfactory_base_objc") {
       sources = [
         "objc/Framework/Classes/PeerConnection/RTCAudioSource+Private.h",
@@ -499,8 +542,6 @@
         "objc/Framework/Classes/PeerConnection/RTCIntervalRange.mm",
         "objc/Framework/Classes/PeerConnection/RTCLegacyStatsReport+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCLegacyStatsReport.mm",
-        "objc/Framework/Classes/PeerConnection/RTCMediaSource+Private.h",
-        "objc/Framework/Classes/PeerConnection/RTCMediaSource.mm",
         "objc/Framework/Classes/PeerConnection/RTCMediaStream+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCMediaStream.mm",
         "objc/Framework/Classes/PeerConnection/RTCMediaStreamTrack+Private.h",
@@ -534,11 +575,6 @@
         "objc/Framework/Classes/PeerConnection/RTCSessionDescription+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCSessionDescription.mm",
         "objc/Framework/Classes/PeerConnection/RTCTracing.mm",
-        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter+Private.h",
-        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h",
-        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.mm",
-        "objc/Framework/Classes/PeerConnection/RTCVideoSource+Private.h",
-        "objc/Framework/Classes/PeerConnection/RTCVideoSource.mm",
         "objc/Framework/Classes/PeerConnection/RTCVideoTrack+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCVideoTrack.mm",
         "objc/Framework/Headers/WebRTC/RTCAudioSource.h",
@@ -551,7 +587,6 @@
         "objc/Framework/Headers/WebRTC/RTCIceServer.h",
         "objc/Framework/Headers/WebRTC/RTCIntervalRange.h",
         "objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h",
-        "objc/Framework/Headers/WebRTC/RTCMediaSource.h",
         "objc/Framework/Headers/WebRTC/RTCMediaStream.h",
         "objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h",
         "objc/Framework/Headers/WebRTC/RTCMetrics.h",
@@ -568,8 +603,6 @@
         "objc/Framework/Headers/WebRTC/RTCSSLAdapter.h",
         "objc/Framework/Headers/WebRTC/RTCSessionDescription.h",
         "objc/Framework/Headers/WebRTC/RTCTracing.h",
-        "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
-        "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
         "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
       ]
 
@@ -586,12 +619,15 @@
       deps = [
         ":common_objc",
         ":mediaconstraints_objc",
+        ":mediasource_objc",
         ":native_api",
         ":native_video",
         ":video_objc",
         ":videocodec_objc",
         ":videoframebuffer_objc",
-        ":videotracksource_objc",
+        ":videorenderer_objc",
+        ":videorendereradapter_objc",
+        ":videosource_objc",
         "../api:libjingle_peerconnection_api",
         "../api:video_frame_api",
         "../api/video_codecs:video_codecs_api",
@@ -625,8 +661,8 @@
             ":common_objc",
             ":framework_objc",
             ":videocapture_objc",
+            ":videosource_objc",
             ":videotoolbox_objc",
-            ":videotracksource_objc",
             "../../system_wrappers:system_wrappers_default",
             "../media:rtc_media_base",
             "../modules:module_api",
@@ -712,8 +748,8 @@
           ":videocapture_objc",
           ":videocodec_objc",
           ":videoframebuffer_objc",
+          ":videosource_objc",
           ":videotoolbox_objc",
-          ":videotracksource_objc",
           "../../system_wrappers:system_wrappers_default",
           "../media:rtc_media_base",
           "../modules:module_api",
@@ -857,6 +893,31 @@
       }
     }
 
+    rtc_static_library("wrapped_native_codec_objc") {
+      sources = [
+        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h",
+        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm",
+        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h",
+        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.mm",
+      ]
+
+      configs += [ "..:common_objc" ]
+      public_configs = [ ":common_config_objc" ]
+
+      if (!build_with_chromium && is_clang) {
+        # Suppress warnings from the Chromium Clang plugin
+        # (bugs.webrtc.org/163).
+        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+      }
+
+      deps = [
+        ":common_objc",
+        ":videocodec_objc",
+        "../api/video_codecs:video_codecs_api",
+        "../media:rtc_media_base",
+      ]
+    }
+
     # The native API is currently experimental and may change without notice.
     rtc_static_library("native_api") {
       visibility = [ "*" ]
@@ -865,6 +926,12 @@
         "objc/Framework/Native/api/video_decoder_factory.mm",
         "objc/Framework/Native/api/video_encoder_factory.h",
         "objc/Framework/Native/api/video_encoder_factory.mm",
+        "objc/Framework/Native/api/video_frame.h",
+        "objc/Framework/Native/api/video_frame.mm",
+        "objc/Framework/Native/api/video_frame_buffer.h",
+        "objc/Framework/Native/api/video_frame_buffer.mm",
+        "objc/Framework/Native/api/video_renderer.h",
+        "objc/Framework/Native/api/video_renderer.mm",
       ]
 
       configs += [ "..:common_objc" ]
@@ -881,6 +948,8 @@
         ":native_video",
         ":videocodec_objc",
         ":videoframebuffer_objc",
+        ":videorenderer_objc",
+        "../api:video_frame_api",
         "../api/video_codecs:video_codecs_api",
         "../common_video",
         "../rtc_base:rtc_base",
@@ -889,14 +958,18 @@
 
     rtc_static_library("native_video") {
       sources = [
-        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h",
-        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm",
-        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h",
-        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.mm",
+        "objc/Framework/Native/src/objc_frame_buffer.h",
+        "objc/Framework/Native/src/objc_frame_buffer.mm",
         "objc/Framework/Native/src/objc_video_decoder_factory.h",
         "objc/Framework/Native/src/objc_video_decoder_factory.mm",
         "objc/Framework/Native/src/objc_video_encoder_factory.h",
         "objc/Framework/Native/src/objc_video_encoder_factory.mm",
+        "objc/Framework/Native/src/objc_video_frame.h",
+        "objc/Framework/Native/src/objc_video_frame.mm",
+        "objc/Framework/Native/src/objc_video_renderer.h",
+        "objc/Framework/Native/src/objc_video_renderer.mm",
+        "objc/Framework/Native/src/objc_video_track_source.h",
+        "objc/Framework/Native/src/objc_video_track_source.mm",
       ]
 
       configs += [ "..:common_objc" ]
@@ -913,8 +986,10 @@
         ":common_objc",
         ":videocodec_objc",
         ":videoframebuffer_objc",
-        ":videotracksource_objc",
+        ":videorenderer_objc",
+        ":wrapped_native_codec_objc",
         "../api:video_frame_api",
+        "../api:video_frame_api_i420",
         "../api/video_codecs:video_codecs_api",
         "../common_video",
         "../media:rtc_audio_video",
@@ -964,7 +1039,7 @@
         ":video_toolbox_cc",
         ":videocodec_objc",
         ":videoframebuffer_objc",
-        ":videotracksource_objc",
+        ":videosource_objc",
         "../api:video_frame_api",
         "../api/video_codecs:video_codecs_api",
         "../common_video",