Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Unified Diff: webrtc/sdk/android/api/org/webrtc/SurfaceViewRenderer.java

Issue 3002563002: Add VideoSink interface to SurfaceViewRenderer. (Closed)
Patch Set: Address comments. Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
« no previous file with comments | « webrtc/sdk/android/api/org/webrtc/RendererCommon.java ('k') | webrtc/sdk/android/api/org/webrtc/VideoFrame.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698