Android: Stop using VideoRenderer class
This CL updates the WebRTC code to stop using the old VideoRenderer and VideoRenderer.I420Frame classes and instead use the new VideoSink and VideoFrame classes. This CL is the first step and the old classes are still left in the code for now to keep backwards compatibility. Bug: webrtc:9181 Change-Id: Ib0caa18cbaa2758b7859e850ddcaba003cfb06d6 Reviewed-on: https://webrtc-review.googlesource.com/71662 Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22989}
This commit is contained in:
committed by
Commit Bot
parent
b9ac121598
commit
e987f2b765
@ -97,13 +97,6 @@ public class SurfaceEglRenderer extends EglRenderer implements SurfaceHolder.Cal
|
||||
super.pauseVideo();
|
||||
}
|
||||
|
||||
// VideoRenderer.Callbacks interface.
|
||||
@Override
|
||||
public void renderFrame(VideoRenderer.I420Frame frame) {
|
||||
updateFrameDimensionsAndReportEvents(frame);
|
||||
super.renderFrame(frame);
|
||||
}
|
||||
|
||||
// VideoSink interface.
|
||||
@Override
|
||||
public void onFrame(VideoFrame frame) {
|
||||
@ -132,33 +125,6 @@ public class SurfaceEglRenderer extends EglRenderer implements SurfaceHolder.Cal
|
||||
logD("surfaceChanged: format: " + format + " size: " + width + "x" + height);
|
||||
}
|
||||
|
||||
// Update frame dimensions and report any changes to |rendererEvents|.
|
||||
private void updateFrameDimensionsAndReportEvents(VideoRenderer.I420Frame frame) {
|
||||
synchronized (layoutLock) {
|
||||
if (isRenderingPaused) {
|
||||
return;
|
||||
}
|
||||
if (!isFirstFrameRendered) {
|
||||
isFirstFrameRendered = true;
|
||||
logD("Reporting first rendered frame.");
|
||||
if (rendererEvents != null) {
|
||||
rendererEvents.onFirstFrameRendered();
|
||||
}
|
||||
}
|
||||
if (rotatedFrameWidth != frame.rotatedWidth() || rotatedFrameHeight != frame.rotatedHeight()
|
||||
|| frameRotation != frame.rotationDegree) {
|
||||
logD("Reporting frame resolution changed to " + frame.width + "x" + frame.height
|
||||
+ " with rotation " + frame.rotationDegree);
|
||||
if (rendererEvents != null) {
|
||||
rendererEvents.onFrameResolutionChanged(frame.width, frame.height, frame.rotationDegree);
|
||||
}
|
||||
rotatedFrameWidth = frame.rotatedWidth();
|
||||
rotatedFrameHeight = frame.rotatedHeight();
|
||||
frameRotation = frame.rotationDegree;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update frame dimensions and report any changes to |rendererEvents|.
|
||||
private void updateFrameDimensionsAndReportEvents(VideoFrame frame) {
|
||||
synchronized (layoutLock) {
|
||||
|
||||
@ -21,9 +21,8 @@ import android.view.SurfaceView;
|
||||
/**
|
||||
* Display the video stream on a SurfaceView.
|
||||
*/
|
||||
public class SurfaceViewRenderer extends SurfaceView implements SurfaceHolder.Callback,
|
||||
VideoRenderer.Callbacks, VideoSink,
|
||||
RendererCommon.RendererEvents {
|
||||
public class SurfaceViewRenderer extends SurfaceView
|
||||
implements SurfaceHolder.Callback, VideoSink, RendererCommon.RendererEvents {
|
||||
private static final String TAG = "SurfaceViewRenderer";
|
||||
|
||||
// Cached resource name.
|
||||
@ -180,12 +179,6 @@ public class SurfaceViewRenderer extends SurfaceView implements SurfaceHolder.Ca
|
||||
eglRenderer.pauseVideo();
|
||||
}
|
||||
|
||||
// VideoRenderer.Callbacks interface.
|
||||
@Override
|
||||
public void renderFrame(VideoRenderer.I420Frame frame) {
|
||||
eglRenderer.renderFrame(frame);
|
||||
}
|
||||
|
||||
// VideoSink interface.
|
||||
@Override
|
||||
public void onFrame(VideoFrame frame) {
|
||||
|
||||
@ -25,7 +25,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||
* Can be used to save the video frames to file.
|
||||
*/
|
||||
@JNINamespace("webrtc::jni")
|
||||
public class VideoFileRenderer implements VideoRenderer.Callbacks, VideoSink {
|
||||
public class VideoFileRenderer implements VideoSink {
|
||||
private static final String TAG = "VideoFileRenderer";
|
||||
|
||||
private final HandlerThread renderThread;
|
||||
@ -73,13 +73,6 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks, VideoSink {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFrame(final VideoRenderer.I420Frame i420Frame) {
|
||||
final VideoFrame frame = i420Frame.toVideoFrame();
|
||||
onFrame(frame);
|
||||
frame.release();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFrame(VideoFrame frame) {
|
||||
frame.retain();
|
||||
|
||||
@ -21,6 +21,7 @@ import java.nio.ByteBuffer;
|
||||
* drawer.drawYuv depending on the type of the buffer. The frame will be rendered with rotation
|
||||
* taken into account. You can supply an additional render matrix for custom transformations.
|
||||
*/
|
||||
@JNINamespace("webrtc::jni")
|
||||
public class VideoFrameDrawer {
|
||||
/**
|
||||
* Draws a VideoFrame.TextureBuffer. Calls either drawer.drawOes or drawer.drawRgb
|
||||
@ -97,7 +98,7 @@ public class VideoFrameDrawer {
|
||||
// Input is packed already.
|
||||
packedByteBuffer = planes[i];
|
||||
} else {
|
||||
VideoRenderer.nativeCopyPlane(
|
||||
nativeCopyPlane(
|
||||
planes[i], planeWidths[i], planeHeights[i], strides[i], copyBuffer, planeWidths[i]);
|
||||
packedByteBuffer = copyBuffer;
|
||||
}
|
||||
@ -228,4 +229,8 @@ public class VideoFrameDrawer {
|
||||
yuvUploader.release();
|
||||
lastI420Frame = null;
|
||||
}
|
||||
|
||||
// Helper native function to do a video frame plane copying.
|
||||
static native void nativeCopyPlane(
|
||||
ByteBuffer src, int width, int height, int srcStride, ByteBuffer dst, int dstStride);
|
||||
}
|
||||
|
||||
@ -195,10 +195,6 @@ public class VideoRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
// Helper native function to do a video frame plane copying.
|
||||
static native void nativeCopyPlane(
|
||||
ByteBuffer src, int width, int height, int srcStride, ByteBuffer dst, int dstStride);
|
||||
|
||||
/** The real meat of VideoSinkInterface. */
|
||||
public static interface Callbacks {
|
||||
// |frame| might have pending rotation and implementation of Callbacks
|
||||
|
||||
Reference in New Issue
Block a user