Android SurfaceTextureHelper: Avoid crashing if size hasn't been set

SurfaceTextureHelper currently crashes if an OES texture is produced
before setTextureSize() has been called. This is annoying if the texture
size is not easily known beforehand. A real world example is MediaPlayer
that provides the video size with an asynchronous call to
setOnVideoSizeChangedListener(), but that might happen after the first
texture is produced on some devices.

This CL waits with delivering frames until the size has been sent,
rather than crashing.

Bug: webrtc:10709
Change-Id: I5d9ce542e0edaafe1153fd5fe7d64dba86d7e33c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140080
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28151}
diff --git a/sdk/android/api/org/webrtc/SurfaceTextureHelper.java b/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
index f11b70b..b8f5624 100644
--- a/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
+++ b/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
@@ -205,6 +205,7 @@
     handler.post(() -> {
       this.textureWidth = textureWidth;
       this.textureHeight = textureHeight;
+      tryDeliverTextureFrame();
     });
   }
 
@@ -286,6 +287,12 @@
     if (isQuitting || !hasPendingTexture || isTextureInUse || listener == null) {
       return;
     }
+    if (textureWidth == 0 || textureHeight == 0) {
+      // Information about the resolution needs to be provided by a call to setTextureSize() before
+      // frames are produced.
+      Logging.w(TAG, "Texture size has not been set.");
+      return;
+    }
     isTextureInUse = true;
     hasPendingTexture = false;
 
@@ -297,9 +304,6 @@
     if (timestampAligner != null) {
       timestampNs = timestampAligner.translateTimestamp(timestampNs);
     }
-    if (textureWidth == 0 || textureHeight == 0) {
-      throw new RuntimeException("Texture size has not been set.");
-    }
     final VideoFrame.Buffer buffer =
         new TextureBufferImpl(textureWidth, textureHeight, TextureBuffer.Type.OES, oesTextureId,
             RendererCommon.convertMatrixToAndroidGraphicsMatrix(transformMatrix), handler,