From 05b552f76ab6117359d46b87e52d9957f171f76c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20Kalliom=C3=A4ki?= Date: Thu, 5 Jul 2018 17:06:51 +0200 Subject: [PATCH] Deprecate PeerConnectionFactory#createVideoSource(VideoCapturer). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is done in preparation of moving VideoCapturer out of video_api_java. Clients should update to using createVideoSource(boolean). CapturerObserver is moved to a separate file because it needs to stay in video_api_java to allow VideoSource to depend on it. Bug: webrtc:9496 Change-Id: I3c93f6bc4df553919dcbe05b00ef4c68f2c9ab60 Reviewed-on: https://webrtc-review.googlesource.com/87305 Reviewed-by: Magnus Jedvert Commit-Queue: Sami Kalliomäki Cr-Commit-Position: refs/heads/master@{#23868} --- sdk/android/BUILD.gn | 3 +- .../api/org/webrtc/CapturerObserver.java | 29 +++++++++++++++++++ .../api/org/webrtc/PeerConnectionFactory.java | 1 + sdk/android/api/org/webrtc/VideoCapturer.java | 16 ++++++++-- sdk/android/api/org/webrtc/VideoSource.java | 2 +- sdk/android/native_api/video/videosource.h | 4 +-- .../org/webrtc/NativeCapturerObserver.java | 2 +- 7 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 sdk/android/api/org/webrtc/CapturerObserver.java 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.