Add Android native API: CreateJavaVideoSource

Adds Android native API for creating VideoTrackSourceInterface objects
that can be fed frames using VideoCapturer.CapturerObserver.

NativeCapturerObserver is moved out of VideoSource because it will now
be used without a VideoSource. It now takes a pointer to
AndroidVideoTrackSource directly instead of VideoTrackSourceProxy.

VideoSource and NativeCapturerObserver JNI code is moved away from
androidvideotracksource.cc to their own files. This allows using
AndroidVideoTrackSource independently.

Bug: webrtc:8769
Change-Id: Ifb9e1eb27d4c8237597d19d932ca6e863abb4d27
Reviewed-on: https://webrtc-review.googlesource.com/76924
Reviewed-by: Paulina Hensman <phensman@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23269}
diff --git a/sdk/android/api/org/webrtc/VideoSource.java b/sdk/android/api/org/webrtc/VideoSource.java
index 469aac7..a326a2c 100644
--- a/sdk/android/api/org/webrtc/VideoSource.java
+++ b/sdk/android/api/org/webrtc/VideoSource.java
@@ -17,83 +17,18 @@
  */
 @JNINamespace("webrtc::jni")
 public class VideoSource extends MediaSource {
-  private static class NativeCapturerObserver implements VideoCapturer.CapturerObserver {
-    private final long nativeSource;
-    // TODO(bugs.webrtc.org/9181): Remove.
-    @Nullable private final SurfaceTextureHelper surfaceTextureHelper;
-
-    public NativeCapturerObserver(long nativeSource) {
-      this.nativeSource = nativeSource;
-      this.surfaceTextureHelper = null;
-    }
-
-    // TODO(bugs.webrtc.org/9181): Remove.
-    public NativeCapturerObserver(long nativeSource, SurfaceTextureHelper surfaceTextureHelper) {
-      this.nativeSource = nativeSource;
-      this.surfaceTextureHelper = surfaceTextureHelper;
-    }
-
-    @Override
-    public void onCapturerStarted(boolean success) {
-      nativeCapturerStarted(nativeSource, success);
-    }
-
-    @Override
-    public void onCapturerStopped() {
-      nativeCapturerStopped(nativeSource);
-    }
-
-    // TODO(bugs.webrtc.org/9181): Remove.
-    @Override
-    @SuppressWarnings("deprecation")
-    public void onByteBufferFrameCaptured(
-        byte[] data, int width, int height, int rotation, long timestampNs) {
-      // This NV21Buffer is not possible to retain. This is safe only because the native code will
-      // always call cropAndScale() and directly make a deep copy of the buffer.
-      final VideoFrame.Buffer nv21Buffer =
-          new NV21Buffer(data, width, height, null /* releaseCallback */);
-      final VideoFrame frame = new VideoFrame(nv21Buffer, rotation, timestampNs);
-      onFrameCaptured(frame);
-      frame.release();
-    }
-
-    // TODO(bugs.webrtc.org/9181): Remove.
-    @Override
-    @SuppressWarnings("deprecation")
-    public void onTextureFrameCaptured(int width, int height, int oesTextureId,
-        float[] transformMatrix, int rotation, long timestampNs) {
-      final VideoFrame.Buffer buffer = surfaceTextureHelper.createTextureBuffer(
-          width, height, RendererCommon.convertMatrixToAndroidGraphicsMatrix(transformMatrix));
-      final VideoFrame frame = new VideoFrame(buffer, rotation, timestampNs);
-      onFrameCaptured(frame);
-      frame.release();
-    }
-
-    @Override
-    public void onFrameCaptured(VideoFrame frame) {
-      nativeOnFrameCaptured(nativeSource, frame.getBuffer().getWidth(),
-          frame.getBuffer().getHeight(), frame.getRotation(), frame.getTimestampNs(),
-          frame.getBuffer());
-    }
-
-    public void dispose() {
-      if (surfaceTextureHelper != null) {
-        surfaceTextureHelper.dispose();
-      }
-    }
-  }
-
   private final NativeCapturerObserver capturerObserver;
 
   public VideoSource(long nativeSource) {
     super(nativeSource);
-    this.capturerObserver = new NativeCapturerObserver(nativeSource);
+    this.capturerObserver = new NativeCapturerObserver(nativeGetInternalSource(nativeSource));
   }
 
   // TODO(bugs.webrtc.org/9181): Remove.
   VideoSource(long nativeSource, SurfaceTextureHelper surfaceTextureHelper) {
     super(nativeSource);
-    this.capturerObserver = new NativeCapturerObserver(nativeSource, surfaceTextureHelper);
+    this.capturerObserver =
+        new NativeCapturerObserver(nativeGetInternalSource(nativeSource), surfaceTextureHelper);
   }
 
   /**
@@ -116,9 +51,7 @@
     super.dispose();
   }
 
+  // Returns source->internal() from webrtc::VideoTrackSourceProxy.
+  private static native long nativeGetInternalSource(long source);
   private static native void nativeAdaptOutputFormat(long source, int width, int height, int fps);
-  private static native void nativeCapturerStarted(long source, boolean success);
-  private static native void nativeCapturerStopped(long source);
-  private static native void nativeOnFrameCaptured(
-      long source, int width, int height, int rotation, long timestampNs, VideoFrame.Buffer frame);
 }