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);
}