Index: webrtc/api/java/android/org/webrtc/SurfaceViewRenderer.java |
diff --git a/webrtc/api/java/android/org/webrtc/SurfaceViewRenderer.java b/webrtc/api/java/android/org/webrtc/SurfaceViewRenderer.java |
index c37d24770f3d754e685cdbae6291c6c422a0ecdc..4b79fe49bf99d22d7fdc4155f971c1a01afc275f 100644 |
--- a/webrtc/api/java/android/org/webrtc/SurfaceViewRenderer.java |
+++ b/webrtc/api/java/android/org/webrtc/SurfaceViewRenderer.java |
@@ -295,7 +295,6 @@ public class SurfaceViewRenderer extends SurfaceView |
VideoRenderer.renderFrameDone(pendingFrame); |
} |
pendingFrame = frame; |
- updateFrameDimensionsAndReportEvents(frame); |
renderThreadHandler.post(renderFrameRunnable); |
} |
} |
@@ -321,23 +320,26 @@ public class SurfaceViewRenderer extends SurfaceView |
// View layout interface. |
@Override |
protected void onMeasure(int widthSpec, int heightSpec) { |
+ final boolean isNewSize; |
synchronized (layoutLock) { |
if (frameWidth == 0 || frameHeight == 0) { |
super.onMeasure(widthSpec, heightSpec); |
return; |
} |
desiredLayoutSize = getDesiredLayoutSize(widthSpec, heightSpec); |
- if (desiredLayoutSize.x != getMeasuredWidth() || desiredLayoutSize.y != getMeasuredHeight()) { |
- // Clear the surface asap before the layout change to avoid stretched video and other |
- // render artifacs. Don't wait for it to finish because the IO thread should never be |
- // blocked, so it's a best-effort attempt. |
- synchronized (handlerLock) { |
- if (renderThreadHandler != null) { |
- renderThreadHandler.postAtFrontOfQueue(makeBlackRunnable); |
- } |
+ isNewSize = (desiredLayoutSize.x != getMeasuredWidth() |
+ || desiredLayoutSize.y != getMeasuredHeight()); |
+ setMeasuredDimension(desiredLayoutSize.x, desiredLayoutSize.y); |
+ } |
+ if (isNewSize) { |
+ // Clear the surface asap before the layout change to avoid stretched video and other |
+ // render artifacs. Don't wait for it to finish because the IO thread should never be |
+ // blocked, so it's a best-effort attempt. |
+ synchronized (handlerLock) { |
+ if (renderThreadHandler != null) { |
+ renderThreadHandler.postAtFrontOfQueue(makeBlackRunnable); |
} |
} |
- setMeasuredDimension(desiredLayoutSize.x, desiredLayoutSize.y); |
} |
} |
@@ -446,6 +448,7 @@ public class SurfaceViewRenderer extends SurfaceView |
frame = pendingFrame; |
pendingFrame = null; |
} |
+ updateFrameDimensionsAndReportEvents(frame); |
if (eglBase == null || !eglBase.hasSurface()) { |
Logging.d(TAG, getResourceName() + "No surface to draw on"); |
VideoRenderer.renderFrameDone(frame); |