2016-02-11 12:21:45 -08:00
|
|
|
/*
|
|
|
|
|
* 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;
|
|
|
|
|
|
2016-02-12 17:05:29 +01:00
|
|
|
import android.content.Context;
|
2016-02-18 13:09:54 +01:00
|
|
|
import java.util.List;
|
2016-02-12 17:05:29 +01:00
|
|
|
|
|
|
|
|
// Base interface for all VideoCapturers to implement.
|
|
|
|
|
public interface VideoCapturer {
|
|
|
|
|
// Interface used for providing callbacks to an observer.
|
2018-07-05 17:06:51 +02:00
|
|
|
@Deprecated
|
2016-02-12 17:05:29 +01:00
|
|
|
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);
|
2016-07-20 16:13:08 +02:00
|
|
|
void onCapturerStopped();
|
2016-02-12 17:05:29 +01:00
|
|
|
|
2017-08-11 00:26:05 -07:00
|
|
|
// Delivers a captured frame. Called on a Java thread owned by VideoCapturer.
|
|
|
|
|
void onFrameCaptured(VideoFrame frame);
|
2016-02-11 12:21:45 -08:00
|
|
|
}
|
|
|
|
|
|
2018-07-05 17:06:51 +02:00
|
|
|
/** 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.");
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-07 10:00:22 +02:00
|
|
|
/**
|
|
|
|
|
* 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
|
2018-05-02 14:41:22 +02:00
|
|
|
* {@code surfaceTextureHelper}, register itself as a listener, and forward the frames to
|
|
|
|
|
* CapturerObserver.onFrameCaptured(). The caller still has ownership of {@code
|
|
|
|
|
* surfaceTextureHelper} and is responsible for making sure surfaceTextureHelper.dispose() is
|
|
|
|
|
* called. This also means that the caller can reuse the SurfaceTextureHelper to initialize a new
|
|
|
|
|
* VideoCapturer once the previous VideoCapturer has been disposed.
|
2016-07-07 10:00:22 +02:00
|
|
|
*/
|
2018-07-05 17:06:51 +02:00
|
|
|
// 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);
|
|
|
|
|
}
|
2016-07-07 10:00:22 +02:00
|
|
|
|
2016-03-14 03:59:38 -07:00
|
|
|
/**
|
2018-05-02 14:41:22 +02:00
|
|
|
* Start capturing frames in a format that is as close as possible to {@code width x height} and
|
|
|
|
|
* {@code framerate}.
|
2016-03-14 03:59:38 -07:00
|
|
|
*/
|
2016-07-07 10:00:22 +02:00
|
|
|
void startCapture(int width, int height, int framerate);
|
2016-02-12 17:05:29 +01:00
|
|
|
|
2016-03-14 03:59:38 -07:00
|
|
|
/**
|
|
|
|
|
* Stop capturing. This function should block until capture is actually stopped.
|
|
|
|
|
*/
|
2016-02-12 17:05:29 +01:00
|
|
|
void stopCapture() throws InterruptedException;
|
|
|
|
|
|
2016-06-14 05:33:18 -07:00
|
|
|
void changeCaptureFormat(int width, int height, int framerate);
|
|
|
|
|
|
2016-03-14 03:59:38 -07:00
|
|
|
/**
|
|
|
|
|
* Perform any final cleanup here. No more capturing will be done after this call.
|
|
|
|
|
*/
|
2016-02-12 17:05:29 +01:00
|
|
|
void dispose();
|
2016-08-31 18:50:52 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return true if-and-only-if this is a screen capturer.
|
|
|
|
|
*/
|
|
|
|
|
boolean isScreencast();
|
2016-02-11 12:21:45 -08:00
|
|
|
}
|