diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index bc8e089b06..83d5f64064 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -745,6 +745,7 @@ rtc_android_library("video_api_java") { "api/org/webrtc/EncodedImage.java", "api/org/webrtc/VideoCapturer.java", "api/org/webrtc/VideoCodecInfo.java", + "api/org/webrtc/CapturerObserver.java", "api/org/webrtc/VideoCodecStatus.java", "api/org/webrtc/VideoDecoder.java", "api/org/webrtc/VideoDecoderFactory.java", @@ -833,7 +834,6 @@ rtc_android_library("video_java") { "api/org/webrtc/GlRectDrawer.java", "api/org/webrtc/VideoDecoderFallback.java", "api/org/webrtc/VideoEncoderFallback.java", - "src/java/org/webrtc/NativeCapturerObserver.java", "src/java/org/webrtc/NV21Buffer.java", "src/java/org/webrtc/VideoDecoderWrapper.java", "src/java/org/webrtc/VideoEncoderWrapper.java", @@ -990,6 +990,7 @@ rtc_android_library("peerconnection_java") { "api/org/webrtc/VideoSource.java", "api/org/webrtc/VideoTrack.java", "src/java/org/webrtc/NativeLibrary.java", + "src/java/org/webrtc/NativeCapturerObserver.java", ] deps = [ diff --git a/sdk/android/api/org/webrtc/CapturerObserver.java b/sdk/android/api/org/webrtc/CapturerObserver.java new file mode 100644 index 0000000000..4edab9aa1f --- /dev/null +++ b/sdk/android/api/org/webrtc/CapturerObserver.java @@ -0,0 +1,29 @@ +/* + * Copyright 2018 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. + */ + +package org.webrtc; + +/** + * Interface for observering a capturer. Passed to {@link VideoCapturer#initialize}. Provided by + * {@link VideoSource#getCapturerObserver}. + * + * All callbacks must be executed on a single thread. + * + * @note This will replace the deprecated VideoCapturer.CapturerObserver interface. + */ +public interface CapturerObserver extends VideoCapturer.CapturerObserver { + /** Notify if the capturer have been started successfully or not. */ + @Override void onCapturerStarted(boolean success); + /** Notify that the capturer has been stopped. */ + @Override void onCapturerStopped(); + + /** Delivers a captured frame. */ + @Override void onFrameCaptured(VideoFrame frame); +} diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java index 789baf3cc9..dc89aec31f 100644 --- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java +++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java @@ -357,6 +357,7 @@ public class PeerConnectionFactory { return new VideoSource(nativeCreateVideoSource(nativeFactory, isScreencast)); } + @Deprecated public VideoSource createVideoSource(VideoCapturer capturer) { final EglBase.Context eglContext = localEglbase == null ? null : localEglbase.getEglBaseContext(); diff --git a/sdk/android/api/org/webrtc/VideoCapturer.java b/sdk/android/api/org/webrtc/VideoCapturer.java index 99a07294ff..8292fbd1cc 100644 --- a/sdk/android/api/org/webrtc/VideoCapturer.java +++ b/sdk/android/api/org/webrtc/VideoCapturer.java @@ -16,6 +16,7 @@ import java.util.List; // Base interface for all VideoCapturers to implement. public interface VideoCapturer { // Interface used for providing callbacks to an observer. + @Deprecated public interface CapturerObserver { // Notify if the camera have been started successfully or not. // Called on a Java thread owned by VideoCapturer. @@ -26,6 +27,13 @@ public interface VideoCapturer { void onFrameCaptured(VideoFrame frame); } + /** Deprecated, implementations should be update to implement the version below. */ + @Deprecated + default void initialize(SurfaceTextureHelper surfaceTextureHelper, Context applicationContext, + CapturerObserver capturerObserver) { + throw new UnsupportedOperationException("Not implemented."); + } + /** * This function is used to initialize the camera thread, the android application context, and the * capture observer. It will be called only once and before any startCapture() request. The @@ -37,8 +45,12 @@ public interface VideoCapturer { * called. This also means that the caller can reuse the SurfaceTextureHelper to initialize a new * VideoCapturer once the previous VideoCapturer has been disposed. */ - void initialize(SurfaceTextureHelper surfaceTextureHelper, Context applicationContext, - CapturerObserver capturerObserver); + // Our version of clang format doesn't understand default and messes up. + // clang-format off + default void initialize(SurfaceTextureHelper surfaceTextureHelper, Context applicationContext, + org.webrtc.CapturerObserver capturerObserver) { + initialize(surfaceTextureHelper, applicationContext, (CapturerObserver) capturerObserver); + } /** * Start capturing frames in a format that is as close as possible to {@code width x height} and diff --git a/sdk/android/api/org/webrtc/VideoSource.java b/sdk/android/api/org/webrtc/VideoSource.java index 3a290e3895..fb0ad1a4d0 100644 --- a/sdk/android/api/org/webrtc/VideoSource.java +++ b/sdk/android/api/org/webrtc/VideoSource.java @@ -40,7 +40,7 @@ public class VideoSource extends MediaSource { nativeAdaptOutputFormat(nativeSource, width, height, fps); } - public VideoCapturer.CapturerObserver getCapturerObserver() { + public CapturerObserver getCapturerObserver() { return capturerObserver; } diff --git a/sdk/android/native_api/video/videosource.h b/sdk/android/native_api/video/videosource.h index 7c42304440..0c4f33342e 100644 --- a/sdk/android/native_api/video/videosource.h +++ b/sdk/android/native_api/video/videosource.h @@ -22,8 +22,8 @@ namespace webrtc { // Java object that can be used to feed frames to the source. class JavaVideoTrackSourceInterface : public VideoTrackSourceInterface { public: - // Returns VideoCapturer.CapturerObserver object that can be used to feed - // frames to the video source. + // Returns CapturerObserver object that can be used to feed frames to the + // video source. virtual ScopedJavaLocalRef GetJavaVideoCapturerObserver( JNIEnv* env) = 0; }; diff --git a/sdk/android/src/java/org/webrtc/NativeCapturerObserver.java b/sdk/android/src/java/org/webrtc/NativeCapturerObserver.java index 1bd87ba143..bbef277da7 100644 --- a/sdk/android/src/java/org/webrtc/NativeCapturerObserver.java +++ b/sdk/android/src/java/org/webrtc/NativeCapturerObserver.java @@ -16,7 +16,7 @@ import javax.annotation.Nullable; * Implements VideoCapturer.CapturerObserver and feeds frames to * webrtc::jni::AndroidVideoTrackSource. */ -class NativeCapturerObserver implements VideoCapturer.CapturerObserver { +class NativeCapturerObserver implements CapturerObserver { // Pointer to webrtc::jni::AndroidVideoTrackSource. private final long nativeSource; // TODO(bugs.webrtc.org/9181): Remove.