Call onStart at each frame

pull/528/head
Mattia Iavarone 6 years ago
parent a6038227c5
commit d44c16341a
  1. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/internal/Issue514Workaround.java
  2. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/SnapshotGlPictureRecorder.java
  3. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java

@ -2,9 +2,6 @@ package com.otaliastudios.cameraview.internal;
import android.graphics.SurfaceTexture; import android.graphics.SurfaceTexture;
import androidx.annotation.NonNull;
import com.otaliastudios.cameraview.size.Size;
/** /**
* Fixes an issue for some devices with snapshot picture and video recording. * Fixes an issue for some devices with snapshot picture and video recording.
@ -14,9 +11,8 @@ public class Issue514Workaround {
private final SurfaceTexture surfaceTexture; private final SurfaceTexture surfaceTexture;
public Issue514Workaround(int cameraTextureId, int outputWidth, int outputHeight) { public Issue514Workaround(int cameraTextureId) {
surfaceTexture = new SurfaceTexture(cameraTextureId); surfaceTexture = new SurfaceTexture(cameraTextureId);
// surfaceTexture.setDefaultBufferSize(outputWidth, outputHeight);
} }
public void onStart() { public void onStart() {

@ -169,9 +169,7 @@ public class SnapshotGlPictureRecorder extends PictureRecorder {
final int fakeOutputTextureId = 9999; final int fakeOutputTextureId = 9999;
SurfaceTexture fakeOutputSurface = new SurfaceTexture(fakeOutputTextureId); SurfaceTexture fakeOutputSurface = new SurfaceTexture(fakeOutputTextureId);
fakeOutputSurface.setDefaultBufferSize(mResult.size.getWidth(), mResult.size.getHeight()); fakeOutputSurface.setDefaultBufferSize(mResult.size.getWidth(), mResult.size.getHeight());
final Issue514Workaround issue514Workaround = new Issue514Workaround(mTextureId, final Issue514Workaround issue514Workaround = new Issue514Workaround(mTextureId);
mResult.size.getWidth(),
mResult.size.getHeight());
// 1. Create an EGL surface // 1. Create an EGL surface
final EglCore core = new EglCore(eglContext, EglCore.FLAG_RECORDABLE); final EglCore core = new EglCore(eglContext, EglCore.FLAG_RECORDABLE);

@ -95,12 +95,11 @@ 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.width, mConfig.height); mIssue514Workaround = new Issue514Workaround(mConfig.textureId);
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();
mViewport = new EglViewport(); mViewport = new EglViewport();
mIssue514Workaround.onStart();
} }
@EncoderThread @EncoderThread
@ -127,6 +126,7 @@ 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.");

Loading…
Cancel
Save