Android: Output VideoFrames from SurfaceTextureHelper
Bug: webrtc:9412
Change-Id: Iffc8dae2fdfb8d7e5c730b433614b7aa30ceb55b
Reviewed-on: https://webrtc-review.googlesource.com/83943
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23867}
diff --git a/sdk/android/api/org/webrtc/ScreenCapturerAndroid.java b/sdk/android/api/org/webrtc/ScreenCapturerAndroid.java
index d448e29..9a1bf61 100644
--- a/sdk/android/api/org/webrtc/ScreenCapturerAndroid.java
+++ b/sdk/android/api/org/webrtc/ScreenCapturerAndroid.java
@@ -33,8 +33,7 @@
* frames. At any time, at most one frame is being processed.
*/
@TargetApi(21)
-public class ScreenCapturerAndroid
- implements VideoCapturer, SurfaceTextureHelper.OnTextureFrameAvailableListener {
+public class ScreenCapturerAndroid implements VideoCapturer, VideoSink {
private static final int DISPLAY_FLAGS =
DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC | DisplayManager.VIRTUAL_DISPLAY_FLAG_PRESENTATION;
// DPI for VirtualDisplay, does not seem to matter for us.
@@ -186,7 +185,7 @@
}
private void createVirtualDisplay() {
- surfaceTextureHelper.getSurfaceTexture().setDefaultBufferSize(width, height);
+ surfaceTextureHelper.setTextureSize(width, height);
virtualDisplay = mediaProjection.createVirtualDisplay("WebRTC_ScreenCapture", width, height,
VIRTUAL_DISPLAY_DPI, DISPLAY_FLAGS, new Surface(surfaceTextureHelper.getSurfaceTexture()),
null /* callback */, null /* callback handler */);
@@ -194,13 +193,9 @@
// This is called on the internal looper thread of {@Code SurfaceTextureHelper}.
@Override
- public void onTextureFrameAvailable(int oesTextureId, float[] transformMatrix, long timestampNs) {
+ public void onFrame(VideoFrame frame) {
numCapturedFrames++;
- final VideoFrame.Buffer buffer = surfaceTextureHelper.createTextureBuffer(
- width, height, RendererCommon.convertMatrixToAndroidGraphicsMatrix(transformMatrix));
- final VideoFrame frame = new VideoFrame(buffer, 0 /* rotation */, timestampNs);
capturerObserver.onFrameCaptured(frame);
- frame.release();
}
@Override