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

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

Issue 2635133003: Update YuvConverter to use GlTextureFrameBuffer. (Closed)
Patch Set: Make variable final. Created 3 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/sdk/android/api/org/webrtc/YuvConverter.java
diff --git a/webrtc/sdk/android/api/org/webrtc/YuvConverter.java b/webrtc/sdk/android/api/org/webrtc/YuvConverter.java
index 050d69de8edbaa3c95d37cd8f1750bf740e974d9..bd6f8af76abcdfb703acf4987bff52e29f17992c 100644
--- a/webrtc/sdk/android/api/org/webrtc/YuvConverter.java
+++ b/webrtc/sdk/android/api/org/webrtc/YuvConverter.java
@@ -80,15 +80,12 @@ class YuvConverter {
+ "}\n";
// clang-format on
- private final int frameBufferId;
- private final int frameTextureId;
+ private final GlTextureFrameBuffer textureFrameBuffer;
private final GlShader shader;
private final int texMatrixLoc;
private final int xUnitLoc;
private final int coeffsLoc;
private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker();
- private int frameBufferWidth;
- private int frameBufferHeight;
private boolean released = false;
/**
@@ -96,25 +93,7 @@ class YuvConverter {
*/
public YuvConverter() {
threadChecker.checkIsOnValidThread();
- frameTextureId = GlUtil.generateTexture(GLES20.GL_TEXTURE_2D);
- this.frameBufferWidth = 0;
- this.frameBufferHeight = 0;
-
- // Create framebuffer object and bind it.
- final int frameBuffers[] = new int[1];
- GLES20.glGenFramebuffers(1, frameBuffers, 0);
- frameBufferId = frameBuffers[0];
- GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBufferId);
- GlUtil.checkNoGLES2Error("Generate framebuffer");
-
- // Attach the texture to the framebuffer as color attachment.
- GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
- GLES20.GL_TEXTURE_2D, frameTextureId, 0);
- GlUtil.checkNoGLES2Error("Attach texture to framebuffer");
-
- // Restore normal framebuffer.
- GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
-
+ textureFrameBuffer = new GlTextureFrameBuffer(GLES20.GL_RGBA);
shader = new GlShader(VERTEX_SHADER, FRAGMENT_SHADER);
shader.useProgram();
texMatrixLoc = shader.getUniformLocation("texMatrix");
@@ -186,26 +165,14 @@ class YuvConverter {
transformMatrix =
RendererCommon.multiplyMatrices(transformMatrix, RendererCommon.verticalFlipMatrix());
+ final int frameBufferWidth = stride / 4;
+ final int frameBufferHeight = total_height;
+ textureFrameBuffer.setSize(frameBufferWidth, frameBufferHeight);
+
// Bind our framebuffer.
- GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBufferId);
+ GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, textureFrameBuffer.getFrameBufferId());
GlUtil.checkNoGLES2Error("glBindFramebuffer");
- if (frameBufferWidth != stride / 4 || frameBufferHeight != total_height) {
- frameBufferWidth = stride / 4;
- frameBufferHeight = total_height;
- // (Re)-Allocate texture.
- GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
- GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, frameTextureId);
- GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, frameBufferWidth,
- frameBufferHeight, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null);
-
- // Check that the framebuffer is in a good state.
- final int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);
- if (status != GLES20.GL_FRAMEBUFFER_COMPLETE) {
- throw new IllegalStateException("Framebuffer not complete, status: " + status);
- }
- }
-
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, srcTextureId);
GLES20.glUniformMatrix4fv(texMatrixLoc, 1, false, transformMatrix, 0);
@@ -251,9 +218,6 @@ class YuvConverter {
threadChecker.checkIsOnValidThread();
released = true;
shader.release();
- GLES20.glDeleteTextures(1, new int[] {frameTextureId}, 0);
- GLES20.glDeleteFramebuffers(1, new int[] {frameBufferId}, 0);
- frameBufferWidth = 0;
- frameBufferHeight = 0;
+ textureFrameBuffer.release();
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698