pull/696/head
Mattia Iavarone 6 years ago
parent 560be94dcb
commit d2446c2a3f
  1. 2
      .github/workflows/emulator_script.sh
  2. 5
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/CameraIntegrationTest.java
  3. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
adb logcat -c adb logcat -c
adb logcat CameraOrchestrator:I CameraEngine:I CameraView:I CameraCallbacks:I CameraIntegrationTest:I MediaEncoderEngine:I MediaEncoder:I AudioMediaEncoder:I VideoMediaEncoder:I TextureMediaEncoder:I VideoRecorder:I SnapshotVideoRecorder:I MessageQueue:W MPEG4Writer:I *:E -v color & adb logcat CameraOrchestrator:I CameraEngine:I CameraView:I CameraCallbacks:I CameraIntegrationTest:I MediaEncoderEngine:I MediaEncoder:I AudioMediaEncoder:I VideoMediaEncoder:I TextureMediaEncoder:I VideoRecorder:I FullVideoRecorder:I SnapshotVideoRecorder:I MessageQueue:W MPEG4Writer:I *:E -v color &
./gradlew cameraview:connectedCheck ./gradlew cameraview:connectedCheck

@ -988,7 +988,8 @@ public abstract class CameraIntegrationTest<E extends CameraEngine> extends Base
} }
@SuppressWarnings("SameParameterValue") @SuppressWarnings("SameParameterValue")
private static long estimateVideoBytes(long bitRate, long millis) { private static long estimateVideoBytes(long videoBitRate, long millis) {
return Math.round(bitRate * (millis / 1000D) / 8D); // 1.3F accounts for audio.
return Math.round((videoBitRate * 1.3F) * (millis / 1000D) / 8D);
} }
} }

@ -237,11 +237,13 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
* it should be set before calling this method, for example by calling * it should be set before calling this method, for example by calling
* {@link #createRepeatingRequestBuilder(int)}. * {@link #createRepeatingRequestBuilder(int)}.
*/ */
@EngineThread
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")
protected void applyRepeatingRequestBuilder() { protected void applyRepeatingRequestBuilder() {
applyRepeatingRequestBuilder(true, CameraException.REASON_DISCONNECTED); applyRepeatingRequestBuilder(true, CameraException.REASON_DISCONNECTED);
} }
@EngineThread
private void applyRepeatingRequestBuilder(boolean checkStarted, int errorReason) { private void applyRepeatingRequestBuilder(boolean checkStarted, int errorReason) {
if ((getState() == CameraState.PREVIEW && !isChangingState()) || !checkStarted) { if ((getState() == CameraState.PREVIEW && !isChangingState()) || !checkStarted) {
try { try {
@ -1574,15 +1576,19 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
return mRepeatingRequestBuilder; return mRepeatingRequestBuilder;
} }
@EngineThread
@Override @Override
public void applyBuilder(@NonNull Action source) { public void applyBuilder(@NonNull Action source) {
// NOTE: Should never be called on a non-engine thread! // NOTE: Should never be called on a non-engine thread!
// Non-engine threads are not protected by the uncaught exception handler
// and can make the process crash.
applyRepeatingRequestBuilder(); applyRepeatingRequestBuilder();
} }
@Override @Override
public void applyBuilder(@NonNull Action source, @NonNull CaptureRequest.Builder builder) public void applyBuilder(@NonNull Action source, @NonNull CaptureRequest.Builder builder)
throws CameraAccessException { throws CameraAccessException {
// Risky - would be better to ensure that thread is the engine one.
if (getState() == CameraState.PREVIEW && !isChangingState()) { if (getState() == CameraState.PREVIEW && !isChangingState()) {
mSession.capture(builder.build(), mRepeatingRequestCallback, null); mSession.capture(builder.build(), mRepeatingRequestCallback, null);
} }

Loading…
Cancel
Save