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}
This commit is contained in:

committed by
Commit Bot

parent
419b6dc691
commit
80e7a7fd1a
@ -33,8 +33,7 @@ import javax.annotation.Nullable;
|
||||
* 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 @@ public class ScreenCapturerAndroid
|
||||
}
|
||||
|
||||
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 @@ public class ScreenCapturerAndroid
|
||||
|
||||
// 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
|
||||
|
Reference in New Issue
Block a user