Use workaround in SnapshotVideoRecorder

pull/528/head
Mattia Iavarone 6 years ago
parent ffde57c20b
commit 47053a3fbb
  1. 9
      cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java
  2. 7
      cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java

@ -9,6 +9,7 @@ import android.os.Build;
import android.view.Surface; import android.view.Surface;
import com.otaliastudios.cameraview.CameraLogger; import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.internal.Issue514Workaround;
import com.otaliastudios.cameraview.overlay.Overlay; import com.otaliastudios.cameraview.overlay.Overlay;
import com.otaliastudios.cameraview.VideoResult; import com.otaliastudios.cameraview.VideoResult;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
@ -66,6 +67,8 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram
private boolean mHasOverlay; private boolean mHasOverlay;
private int mOverlayRotation; private int mOverlayRotation;
private Issue514Workaround mIssue514Workaround;
public SnapshotVideoRecorder(@NonNull CameraEngine engine, public SnapshotVideoRecorder(@NonNull CameraEngine engine,
@NonNull GlCameraPreview preview, @NonNull GlCameraPreview preview,
@Nullable Overlay overlay, @Nullable Overlay overlay,
@ -100,6 +103,7 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram
mOverlaySurface = new Surface(mOverlaySurfaceTexture); mOverlaySurface = new Surface(mOverlaySurfaceTexture);
temp.release(true); temp.release(true);
} }
mIssue514Workaround = new Issue514Workaround(textureId, mHasOverlay);
} }
@RendererThread @RendererThread
@ -166,6 +170,7 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram
if (mCurrentState == STATE_RECORDING) { if (mCurrentState == STATE_RECORDING) {
LOG.v("dispatching frame."); LOG.v("dispatching frame.");
mIssue514Workaround.onStart();
TextureMediaEncoder textureEncoder = (TextureMediaEncoder) mEncoderEngine.getVideoEncoder(); TextureMediaEncoder textureEncoder = (TextureMediaEncoder) mEncoderEngine.getVideoEncoder();
TextureMediaEncoder.Frame frame = textureEncoder.acquireFrame(); TextureMediaEncoder.Frame frame = textureEncoder.acquireFrame();
frame.timestamp = surfaceTexture.getTimestamp(); frame.timestamp = surfaceTexture.getTimestamp();
@ -237,6 +242,10 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram
mDesiredState = STATE_NOT_RECORDING; mDesiredState = STATE_NOT_RECORDING;
mPreview.removeRendererFrameCallback(SnapshotVideoRecorder.this); mPreview.removeRendererFrameCallback(SnapshotVideoRecorder.this);
mPreview = null; mPreview = null;
if (mIssue514Workaround != null) {
mIssue514Workaround.onEnd();
mIssue514Workaround = null;
}
if (mOverlaySurfaceTexture != null) { if (mOverlaySurfaceTexture != null) {
mOverlaySurfaceTexture.release(); mOverlaySurfaceTexture.release();
mOverlaySurfaceTexture = null; mOverlaySurfaceTexture = null;

@ -37,7 +37,6 @@ public class TextureMediaEncoder extends VideoMediaEncoder<TextureConfig> {
return new Frame(); return new Frame();
} }
}); });
private Issue514Workaround mIssue514Workaround;
public TextureMediaEncoder(@NonNull TextureConfig config) { public TextureMediaEncoder(@NonNull TextureConfig config) {
super(config.copy()); super(config.copy());
@ -95,7 +94,6 @@ public class TextureMediaEncoder extends VideoMediaEncoder<TextureConfig> {
mTransformRotation = mConfig.rotation; mTransformRotation = mConfig.rotation;
mConfig.rotation = 0; mConfig.rotation = 0;
super.onPrepare(controller, maxLengthMillis); super.onPrepare(controller, maxLengthMillis);
mIssue514Workaround = new Issue514Workaround(mConfig.textureId, mConfig.hasOverlay());
mEglCore = new EglCore(mConfig.eglContext, EglCore.FLAG_RECORDABLE); mEglCore = new EglCore(mConfig.eglContext, EglCore.FLAG_RECORDABLE);
mWindow = new EglWindowSurface(mEglCore, mSurface, true); mWindow = new EglWindowSurface(mEglCore, mSurface, true);
mWindow.makeCurrent(); mWindow.makeCurrent();
@ -126,7 +124,6 @@ public class TextureMediaEncoder extends VideoMediaEncoder<TextureConfig> {
// First, drain any previous data. // First, drain any previous data.
LOG.i("onEvent", "frameNumber:", mFrameNumber, "timestamp:", frame.timestamp, "- draining."); LOG.i("onEvent", "frameNumber:", mFrameNumber, "timestamp:", frame.timestamp, "- draining.");
drainOutput(false); drainOutput(false);
mIssue514Workaround.onStart();
// Then draw on the surface. // Then draw on the surface.
LOG.i("onEvent", "frameNumber:", mFrameNumber, "timestamp:", frame.timestamp, "- drawing."); LOG.i("onEvent", "frameNumber:", mFrameNumber, "timestamp:", frame.timestamp, "- drawing.");
@ -169,10 +166,6 @@ public class TextureMediaEncoder extends VideoMediaEncoder<TextureConfig> {
protected void onStopped() { protected void onStopped() {
super.onStopped(); super.onStopped();
mFramePool.clear(); mFramePool.clear();
if (mIssue514Workaround != null) {
mIssue514Workaround.onEnd();
mIssue514Workaround = null;
}
if (mWindow != null) { if (mWindow != null) {
mWindow.release(); mWindow.release();
mWindow = null; mWindow = null;

Loading…
Cancel
Save