diff --git a/Basic-Video-Driver-Java/app/src/main/java/com/tokbox/sample/basicvideodriver/InvertedColorsVideoRenderer.java b/Basic-Video-Driver-Java/app/src/main/java/com/tokbox/sample/basicvideodriver/InvertedColorsVideoRenderer.java index 8aac9242..1373e229 100644 --- a/Basic-Video-Driver-Java/app/src/main/java/com/tokbox/sample/basicvideodriver/InvertedColorsVideoRenderer.java +++ b/Basic-Video-Driver-Java/app/src/main/java/com/tokbox/sample/basicvideodriver/InvertedColorsVideoRenderer.java @@ -225,6 +225,16 @@ void updateTextures(Frame frame) { int half_width = (width + 1) >> 1; int half_height = (height + 1) >> 1; + ByteBuffer bb = frame.getBuffer(); + bb.clear(); + //check if buffer data is correctly sized. + if (bb.remaining() != frame.getYplaneSize() + frame.getUVplaneSize() * 2) { + textureWidth = 0; + textureHeight = 0; + return; + } + + bb.position(0); GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1); GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1); @@ -234,11 +244,11 @@ void updateTextures(Frame frame) { GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[1]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); GLES20.glActiveTexture(GLES20.GL_TEXTURE2); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[2]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); } @Override diff --git a/Basic-Video-Renderer-Java/app/src/main/java/com/tokbox/sample/basicvideorenderer/InvertedColorsVideoRenderer.java b/Basic-Video-Renderer-Java/app/src/main/java/com/tokbox/sample/basicvideorenderer/InvertedColorsVideoRenderer.java index a22a4a44..7f0c2a5d 100644 --- a/Basic-Video-Renderer-Java/app/src/main/java/com/tokbox/sample/basicvideorenderer/InvertedColorsVideoRenderer.java +++ b/Basic-Video-Renderer-Java/app/src/main/java/com/tokbox/sample/basicvideorenderer/InvertedColorsVideoRenderer.java @@ -225,6 +225,15 @@ void updateTextures(Frame frame) { int half_width = (width + 1) >> 1; int half_height = (height + 1) >> 1; + ByteBuffer bb = frame.getBuffer(); + bb.clear(); + //check if buffer data is correctly sized. + if (bb.remaining() != frame.getYplaneSize() + frame.getUVplaneSize() * 2) { + textureWidth = 0; + textureHeight = 0; + return; + } + bb.position(0); GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1); GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1); @@ -234,11 +243,11 @@ void updateTextures(Frame frame) { GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[1]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); GLES20.glActiveTexture(GLES20.GL_TEXTURE2); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[2]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); } @Override diff --git a/Frame-Metadata-Java/app/src/main/java/com/tokbox/sample/framemetadata/ReceiveFrameMetaDataRenderer.java b/Frame-Metadata-Java/app/src/main/java/com/tokbox/sample/framemetadata/ReceiveFrameMetaDataRenderer.java index 8f1c3835..90eaba7b 100644 --- a/Frame-Metadata-Java/app/src/main/java/com/tokbox/sample/framemetadata/ReceiveFrameMetaDataRenderer.java +++ b/Frame-Metadata-Java/app/src/main/java/com/tokbox/sample/framemetadata/ReceiveFrameMetaDataRenderer.java @@ -214,13 +214,23 @@ void GlTexSubImage2D(int width, int height, int stride, } } } - + void updateTextures(Frame frame) { int width = frame.getWidth(); int height = frame.getHeight(); int half_width = (width + 1) >> 1; int half_height = (height + 1) >> 1; + ByteBuffer bb = frame.getBuffer(); + bb.clear(); + //check if buffer data is correctly sized. + if (bb.remaining() != frame.getYplaneSize() + frame.getUVplaneSize() * 2) { + textureWidth = 0; + textureHeight = 0; + return; + } + + bb.position(0); GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1); GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1); @@ -230,11 +240,11 @@ void updateTextures(Frame frame) { GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[1]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); GLES20.glActiveTexture(GLES20.GL_TEXTURE2); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[2]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); } @Override diff --git a/Live-Photo-Capture-Java/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.java b/Live-Photo-Capture-Java/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.java index 7374a241..3360dcf8 100644 --- a/Live-Photo-Capture-Java/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.java +++ b/Live-Photo-Capture-Java/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.java @@ -221,6 +221,16 @@ void updateTextures(Frame frame) { int half_width = (width + 1) >> 1; int half_height = (height + 1) >> 1; + ByteBuffer bb = frame.getBuffer(); + bb.clear(); + //check if buffer data is correctly sized. + if (bb.remaining() != frame.getYplaneSize() + frame.getUVplaneSize() * 2) { + textureWidth = 0; + textureHeight = 0; + return; + } + + bb.position(0); GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1); GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1); @@ -230,11 +240,11 @@ void updateTextures(Frame frame) { GLES20.glActiveTexture(GLES20.GL_TEXTURE1); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[1]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getUplane()); GLES20.glActiveTexture(GLES20.GL_TEXTURE2); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIds[2]); - GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); + GlTexSubImage2D(half_width, half_height, frame.getUvStride(), frame.getVplane()); } @Override diff --git a/Live-Photo-Capture-Kotlin/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.kt b/Live-Photo-Capture-Kotlin/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.kt index 60a8810d..add4bcea 100644 --- a/Live-Photo-Capture-Kotlin/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.kt +++ b/Live-Photo-Capture-Kotlin/app/src/main/java/com/tokbox/sample/livephotocapture/ScreenshotVideoRenderer.kt @@ -150,6 +150,17 @@ void main(void) { val half_width = width + 1 shr 1 val half_height = height + 1 shr 1 + val bb = frame.buffer + // If we are reusing this frame, make sure we reset position and + // limit + bb.clear() + if (bb.remaining() != frame.getYplaneSize() + frame.getUVplaneSize() * 2) { + textureWidth = 0 + textureHeight = 0 + return + } + + bb.position(0) GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1) GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1)