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

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

Loading…
Cancel
Save