| Index: webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java
|
| diff --git a/webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java b/webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java
|
| index 06d72425a84bec41f0ba11fc42835018ca58047c..f664b014e1e25134435d3f2ca92892980a77e5f3 100644
|
| --- a/webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java
|
| +++ b/webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java
|
| @@ -28,7 +28,7 @@ import java.util.concurrent.CountDownLatch;
|
| * Interaction with the layout framework in onMeasure and onSizeChanged.
|
| */
|
| public class SurfaceViewRenderer
|
| - extends SurfaceView implements SurfaceHolder.Callback, VideoRenderer.Callbacks {
|
| + extends SurfaceView implements SurfaceHolder.Callback, VideoRenderer.Callbacks, VideoSink {
|
| private static final String TAG = "SurfaceViewRenderer";
|
|
|
| // Cached resource name.
|
| @@ -208,6 +208,13 @@ public class SurfaceViewRenderer
|
| eglRenderer.renderFrame(frame);
|
| }
|
|
|
| + // VideoSink interface.
|
| + @Override
|
| + public void onFrame(VideoFrame frame) {
|
| + updateFrameDimensionsAndReportEvents(frame);
|
| + eglRenderer.onFrame(frame);
|
| + }
|
| +
|
| // View layout interface.
|
| @Override
|
| protected void onMeasure(int widthSpec, int heightSpec) {
|
| @@ -339,6 +346,39 @@ public class SurfaceViewRenderer
|
| }
|
| }
|
|
|
| + // Update frame dimensions and report any changes to |rendererEvents|.
|
| + private void updateFrameDimensionsAndReportEvents(VideoFrame frame) {
|
| + synchronized (layoutLock) {
|
| + if (isRenderingPaused) {
|
| + return;
|
| + }
|
| + if (!isFirstFrameRendered) {
|
| + isFirstFrameRendered = true;
|
| + logD("Reporting first rendered frame.");
|
| + if (rendererEvents != null) {
|
| + rendererEvents.onFirstFrameRendered();
|
| + }
|
| + }
|
| + if (rotatedFrameWidth != frame.getRotatedWidth()
|
| + || rotatedFrameHeight != frame.getRotatedHeight()
|
| + || frameRotation != frame.getRotation()) {
|
| + logD("Reporting frame resolution changed to " + frame.getBuffer().getWidth() + "x"
|
| + + frame.getBuffer().getHeight() + " with rotation " + frame.getRotation());
|
| + if (rendererEvents != null) {
|
| + rendererEvents.onFrameResolutionChanged(
|
| + frame.getBuffer().getWidth(), frame.getBuffer().getHeight(), frame.getRotation());
|
| + }
|
| + rotatedFrameWidth = frame.getRotatedWidth();
|
| + rotatedFrameHeight = frame.getRotatedHeight();
|
| + frameRotation = frame.getRotation();
|
| + post(() -> {
|
| + updateSurfaceSize();
|
| + requestLayout();
|
| + });
|
| + }
|
| + }
|
| + }
|
| +
|
| private void logD(String string) {
|
| Logging.d(TAG, resourceName + string);
|
| }
|
|
|