Android: Allow YuvConverter to be reused

Similar to how GlDrawer and GlTextureFrameBuffer already works, this
CL updates YuvConverter so that it can be reused after release() has
been called. This makes it more convenient to use, it can be stored
in a final variable, and the resources are lazily allocated on first
usage.

Bug: b/112386285
Change-Id: I437c4c3fd414bc8974df75728f33954b28418e3e
Reviewed-on: https://webrtc-review.googlesource.com/93290
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24248}
diff --git a/sdk/android/api/org/webrtc/YuvConverter.java b/sdk/android/api/org/webrtc/YuvConverter.java
index be8d43e..de02c11 100644
--- a/sdk/android/api/org/webrtc/YuvConverter.java
+++ b/sdk/android/api/org/webrtc/YuvConverter.java
@@ -93,7 +93,6 @@
   private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker();
   private final GlTextureFrameBuffer i420TextureFrameBuffer =
       new GlTextureFrameBuffer(GLES20.GL_RGBA);
-  private boolean released = false;
   private final ShaderCallbacks shaderCallbacks = new ShaderCallbacks();
   private final GlGenericDrawer drawer = new GlGenericDrawer(FRAGMENT_SHADER, shaderCallbacks);
 
@@ -107,9 +106,6 @@
   /** Converts the texture buffer to I420. */
   public I420Buffer convert(TextureBuffer inputTextureBuffer) {
     threadChecker.checkIsOnValidThread();
-    if (released) {
-      throw new IllegalStateException("YuvConverter.convert called on released object");
-    }
     // We draw into a buffer laid out like
     //
     //    +---------+
@@ -213,8 +209,9 @@
 
   public void release() {
     threadChecker.checkIsOnValidThread();
-    released = true;
     drawer.release();
     i420TextureFrameBuffer.release();
+    // Allow this class to be reused.
+    threadChecker.detachThread();
   }
 }