From 2ab9879af0ef661b9afde3f1a56ef7073c4006cf Mon Sep 17 00:00:00 2001 From: magjed Date: Wed, 13 Sep 2017 05:20:45 -0700 Subject: [PATCH] Android: Improve handling of RGB texture frames In the transition period when we have both VideoRenderer.Callbacks and VideoSinks, and VideoRenderer.I420Frames and VideoFrames, the adapters between them does not handle RGB frames correctly. This CL improves the situation somewhat, and at least gives clearer error messages. BUG=webrtc:7749 Review-Url: https://codereview.webrtc.org/3017433002 Cr-Commit-Position: refs/heads/master@{#19817} --- webrtc/sdk/android/api/org/webrtc/VideoRenderer.java | 3 ++- webrtc/sdk/android/src/java/org/webrtc/TextureBufferImpl.java | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/webrtc/sdk/android/api/org/webrtc/VideoRenderer.java b/webrtc/sdk/android/api/org/webrtc/VideoRenderer.java index 623f6b94cc..ec732be944 100644 --- a/webrtc/sdk/android/api/org/webrtc/VideoRenderer.java +++ b/webrtc/sdk/android/api/org/webrtc/VideoRenderer.java @@ -93,7 +93,8 @@ public class VideoRenderer { if (rotationDegree % 90 != 0) { throw new IllegalArgumentException("Rotation degree not multiple of 90: " + rotationDegree); } - if (buffer instanceof VideoFrame.TextureBuffer) { + if (buffer instanceof VideoFrame.TextureBuffer + && ((VideoFrame.TextureBuffer) buffer).getType() == VideoFrame.TextureBuffer.Type.OES) { VideoFrame.TextureBuffer textureBuffer = (VideoFrame.TextureBuffer) buffer; this.yuvFrame = false; this.textureId = textureBuffer.getTextureId(); diff --git a/webrtc/sdk/android/src/java/org/webrtc/TextureBufferImpl.java b/webrtc/sdk/android/src/java/org/webrtc/TextureBufferImpl.java index c2b2010ef2..3a7da8d45c 100644 --- a/webrtc/sdk/android/src/java/org/webrtc/TextureBufferImpl.java +++ b/webrtc/sdk/android/src/java/org/webrtc/TextureBufferImpl.java @@ -67,6 +67,9 @@ class TextureBufferImpl implements VideoFrame.TextureBuffer { @Override public VideoFrame.I420Buffer toI420() { + if (type == Type.RGB) { + throw new RuntimeException("toI420 for RGB frames not implemented yet"); + } // SurfaceTextureHelper requires a stride that is divisible by 8. Round width up. // See SurfaceTextureHelper for details on the size and format. int stride = ((width + 7) / 8) * 8;