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}
This commit is contained in:
Magnus Jedvert
2018-08-09 13:51:42 +02:00
committed by Commit Bot
parent 5b26bc61b1
commit 7b87530fcc

View File

@ -93,7 +93,6 @@ public class YuvConverter {
private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker(); private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker();
private final GlTextureFrameBuffer i420TextureFrameBuffer = private final GlTextureFrameBuffer i420TextureFrameBuffer =
new GlTextureFrameBuffer(GLES20.GL_RGBA); new GlTextureFrameBuffer(GLES20.GL_RGBA);
private boolean released = false;
private final ShaderCallbacks shaderCallbacks = new ShaderCallbacks(); private final ShaderCallbacks shaderCallbacks = new ShaderCallbacks();
private final GlGenericDrawer drawer = new GlGenericDrawer(FRAGMENT_SHADER, shaderCallbacks); private final GlGenericDrawer drawer = new GlGenericDrawer(FRAGMENT_SHADER, shaderCallbacks);
@ -107,9 +106,6 @@ public class YuvConverter {
/** Converts the texture buffer to I420. */ /** Converts the texture buffer to I420. */
public I420Buffer convert(TextureBuffer inputTextureBuffer) { public I420Buffer convert(TextureBuffer inputTextureBuffer) {
threadChecker.checkIsOnValidThread(); threadChecker.checkIsOnValidThread();
if (released) {
throw new IllegalStateException("YuvConverter.convert called on released object");
}
// We draw into a buffer laid out like // We draw into a buffer laid out like
// //
// +---------+ // +---------+
@ -213,8 +209,9 @@ public class YuvConverter {
public void release() { public void release() {
threadChecker.checkIsOnValidThread(); threadChecker.checkIsOnValidThread();
released = true;
drawer.release(); drawer.release();
i420TextureFrameBuffer.release(); i420TextureFrameBuffer.release();
// Allow this class to be reused.
threadChecker.detachThread();
} }
} }