
This CL removes internal support for anything else than Android frames that are wrapped Java VideoFrames. This allows for a big internal cleanup and we can remove the internal class AndroidTextureBuffer and all logic related to that. Also, the C++ AndroidVideoTrackSource no longer needs to hold on to a C++ SurfaceTextureHelper and we can remove all JNI code related to SurfaceTextureHelper. Also, when these methods are removed, it's possible to let VideoSource implement the CapturerObserver interface directly and there is no longer any need for AndroidVideoTrackSourceObserver. Clients can then initialize VideoCapturers themselves outside the PeerConnectionFactory, and a new method is added in the PeerConnectionFactory to allow clients to create standalone VideoSources that can be connected to a VideoCapturer outside the factory. Bug: webrtc:9181 Change-Id: Ie292ea9214f382d44dce9120725c62602a646ed8 Reviewed-on: https://webrtc-review.googlesource.com/71666 Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23004}
78 lines
2.9 KiB
Java
78 lines
2.9 KiB
Java
/*
|
|
* Copyright 2013 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;
|
|
|
|
import android.content.Context;
|
|
import java.util.List;
|
|
|
|
// Base interface for all VideoCapturers to implement.
|
|
public interface VideoCapturer {
|
|
// Interface used for providing callbacks to an observer.
|
|
public interface CapturerObserver {
|
|
// Notify if the camera have been started successfully or not.
|
|
// Called on a Java thread owned by VideoCapturer.
|
|
void onCapturerStarted(boolean success);
|
|
void onCapturerStopped();
|
|
|
|
// Delivers a captured frame. Called on a Java thread owned by VideoCapturer.
|
|
@Deprecated
|
|
default void onByteBufferFrameCaptured(
|
|
byte[] data, int width, int height, int rotation, long timeStamp) {
|
|
throw new UnsupportedOperationException("Deprecated and not implemented.");
|
|
}
|
|
|
|
// Delivers a captured frame in a texture with id |oesTextureId|. Called on a Java thread
|
|
// owned by VideoCapturer.
|
|
@Deprecated
|
|
default void onTextureFrameCaptured(int width, int height, int oesTextureId,
|
|
float[] transformMatrix, int rotation, long timestamp) {
|
|
throw new UnsupportedOperationException("Deprecated and not implemented.");
|
|
}
|
|
|
|
// Delivers a captured frame. Called on a Java thread owned by VideoCapturer.
|
|
void onFrameCaptured(VideoFrame frame);
|
|
}
|
|
|
|
/**
|
|
* 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
|
|
* camera thread is guaranteed to be valid until dispose() is called. If the VideoCapturer wants
|
|
* to deliver texture frames, it should do this by rendering on the SurfaceTexture in
|
|
* |surfaceTextureHelper|, register itself as a listener, and forward the frames to
|
|
* CapturerObserver.onFrameCaptured().
|
|
*/
|
|
void initialize(SurfaceTextureHelper surfaceTextureHelper, Context applicationContext,
|
|
CapturerObserver capturerObserver);
|
|
|
|
/**
|
|
* Start capturing frames in a format that is as close as possible to |width| x |height| and
|
|
* |framerate|.
|
|
*/
|
|
void startCapture(int width, int height, int framerate);
|
|
|
|
/**
|
|
* Stop capturing. This function should block until capture is actually stopped.
|
|
*/
|
|
void stopCapture() throws InterruptedException;
|
|
|
|
void changeCaptureFormat(int width, int height, int framerate);
|
|
|
|
/**
|
|
* Perform any final cleanup here. No more capturing will be done after this call.
|
|
*/
|
|
void dispose();
|
|
|
|
/**
|
|
* @return true if-and-only-if this is a screen capturer.
|
|
*/
|
|
boolean isScreencast();
|
|
}
|