From b6b205d23171e8cb53d4105b853325487c54e819 Mon Sep 17 00:00:00 2001 From: thegobot Date: Thu, 11 Nov 2021 11:27:03 +0800 Subject: [PATCH] May be a buffer overflow in enableEncoding() mPreviewWidth changed but onSurfaceCreated() fired after start of the encoder thread (mIsEncoding = true) --- .../main/java/net/ossrs/yasea/SrsCameraView.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/net/ossrs/yasea/SrsCameraView.java b/library/src/main/java/net/ossrs/yasea/SrsCameraView.java index 5c659ec..d6bf56d 100644 --- a/library/src/main/java/net/ossrs/yasea/SrsCameraView.java +++ b/library/src/main/java/net/ossrs/yasea/SrsCameraView.java @@ -117,6 +117,17 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render @Override public void onDrawFrame(GL10 gl) { + + + if(mSurfaceWidth != mPreviewWidth || mSurfaceHeight != mPreviewHeight){ + //May be a buffer overflow in enableEncoding() + //mPreviewWidth changed but onSurfaceCreated fired after enable encoding (mIsEncoding == true) + //could be calling magicFilter.onInputSizeChanged(width, height) in setPreviewResolution() after changing mGLPreviewBuffer? + //or start the encoder only after onSurfaceCreated ... + Log.e(TAG, String.format("Surface dimensions differ from Preview. May be a buffer overflow. Surface: %dx%d, Preview: %dx%d ", mSurfaceWidth, mSurfaceHeight, mPreviewWidth, mPreviewHeight)); + return; + } + GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); @@ -127,8 +138,8 @@ public class SrsCameraView extends GLSurfaceView implements GLSurfaceView.Render magicFilter.setTextureTransformMatrix(mTransformMatrix); magicFilter.onDrawFrame(mOESTextureId); - if (mIsEncoding) { - mGLIntBufferCache.add(magicFilter.getGLFboBuffer()); + if (mIsEncoding) { + mGLIntBufferCache.add(magicFilter.getGLFboBuffer()); synchronized (writeLock) { writeLock.notifyAll(); }