blob: 804560a3c373261f330c1b59b2f8353f45a9c881 [file] [log] [blame]
kjellanderaf716552016-02-11 12:21:45 -08001/*
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11package org.webrtc;
12
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010013import android.content.Context;
Magnus Jedvert5199c742016-02-18 13:09:54 +010014import java.util.List;
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010015
16// Base interface for all VideoCapturers to implement.
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010017public interface VideoCapturer {
18 // Interface used for providing callbacks to an observer.
19 public interface CapturerObserver {
20 // Notify if the camera have been started successfully or not.
21 // Called on a Java thread owned by VideoCapturer.
22 void onCapturerStarted(boolean success);
Sami Kalliomaki16032122016-07-20 16:13:08 +020023 void onCapturerStopped();
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010024
25 // Delivers a captured frame. Called on a Java thread owned by VideoCapturer.
sakalb6760f92016-09-29 04:12:44 -070026 void onByteBufferFrameCaptured(
27 byte[] data, int width, int height, int rotation, long timeStamp);
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010028
29 // Delivers a captured frame in a texture with id |oesTextureId|. Called on a Java thread
30 // owned by VideoCapturer.
sakalb6760f92016-09-29 04:12:44 -070031 void onTextureFrameCaptured(int width, int height, int oesTextureId, float[] transformMatrix,
32 int rotation, long timestamp);
sakalbe910462017-08-11 00:26:05 -070033
34 // Delivers a captured frame. Called on a Java thread owned by VideoCapturer.
35 void onFrameCaptured(VideoFrame frame);
kjellanderaf716552016-02-11 12:21:45 -080036 }
37
magjed0dc23162016-03-14 03:59:38 -070038 /**
Magnus Jedvert27dcacd2016-07-07 10:00:22 +020039 * This function is used to initialize the camera thread, the android application context, and the
40 * capture observer. It will be called only once and before any startCapture() request. The
41 * camera thread is guaranteed to be valid until dispose() is called. If the VideoCapturer wants
42 * to deliver texture frames, it should do this by rendering on the SurfaceTexture in
43 * |surfaceTextureHelper|, register itself as a listener, and forward the texture frames to
44 * CapturerObserver.onTextureFrameCaptured().
magjed0dc23162016-03-14 03:59:38 -070045 */
Magnus Jedvert27dcacd2016-07-07 10:00:22 +020046 void initialize(SurfaceTextureHelper surfaceTextureHelper, Context applicationContext,
47 CapturerObserver capturerObserver);
48
49 /**
50 * Start capturing frames in a format that is as close as possible to |width| x |height| and
51 * |framerate|.
52 */
53 void startCapture(int width, int height, int framerate);
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010054
magjed0dc23162016-03-14 03:59:38 -070055 /**
56 * Stop capturing. This function should block until capture is actually stopped.
57 */
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010058 void stopCapture() throws InterruptedException;
59
sakal79ede032016-06-14 05:33:18 -070060 void changeCaptureFormat(int width, int height, int framerate);
61
magjed0dc23162016-03-14 03:59:38 -070062 /**
63 * Perform any final cleanup here. No more capturing will be done after this call.
64 */
Magnus Jedvert5e7834e2016-02-12 17:05:29 +010065 void dispose();
arsanyb75f2542016-08-31 18:50:52 -070066
67 /**
68 * @return true if-and-only-if this is a screen capturer.
69 */
70 boolean isScreencast();
kjellanderaf716552016-02-11 12:21:45 -080071}