diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index c5bd6668..77ac5e99 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -267,6 +267,7 @@ public class CameraView extends FrameLayout implements LifecycleObserver { setFrameProcessingMaxWidth(frameMaxWidth); setFrameProcessingMaxHeight(frameMaxHeight); setFrameProcessingFormat(frameFormat); + mCameraEngine.setHasFrameProcessors(!mFrameProcessors.isEmpty()); // Apply gestures mapGesture(Gesture.TAP, gestures.getTapAction()); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java index aa9fdee7..1b42782d 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -81,7 +81,7 @@ public class Camera2Engine extends CameraBaseEngine implements ImageReader.OnImageAvailableListener, ActionHolder { - private static final int FRAME_PROCESSING_FORMAT = ImageFormat.NV21; + private static final int FRAME_PROCESSING_POOL_SIZE = 2; @VisibleForTesting static final long METER_TIMEOUT = 2500; private final CameraManager mManager; @@ -543,7 +543,7 @@ public class Camera2Engine extends CameraBaseEngine implements mFrameProcessingSize.getWidth(), mFrameProcessingSize.getHeight(), mFrameProcessingFormat, - 3); + getFrameProcessingPoolSize()); mFrameProcessingReader.setOnImageAvailableListener(this, null); mFrameProcessingSurface = mFrameProcessingReader.getSurface(); outputSurfaces.add(mFrameProcessingSurface); @@ -1397,10 +1397,14 @@ public class Camera2Engine extends CameraBaseEngine implements //region Frame Processing + protected int getFrameProcessingPoolSize() { + return FRAME_PROCESSING_POOL_SIZE; + } + @NonNull @Override protected FrameManager instantiateFrameManager() { - return new ImageFrameManager(2); + return new ImageFrameManager(getFrameProcessingPoolSize()); } @Override diff --git a/demo/src/main/java/com/otaliastudios/cameraview/demo/Option.java b/demo/src/main/java/com/otaliastudios/cameraview/demo/Option.java index 4837b52c..e9297687 100644 --- a/demo/src/main/java/com/otaliastudios/cameraview/demo/Option.java +++ b/demo/src/main/java/com/otaliastudios/cameraview/demo/Option.java @@ -4,6 +4,7 @@ import android.graphics.Color; import androidx.annotation.NonNull; import androidx.core.util.Pair; +import android.graphics.ImageFormat; import android.view.View; import android.view.ViewGroup; @@ -576,5 +577,23 @@ public abstract class Option { public Collection getAll(@NonNull CameraView view, @NonNull CameraOptions options) { return options.getSupportedFrameProcessingFormats(); } + + @NonNull + @Override + public String toString(@NonNull Integer value) { + switch (value) { + case ImageFormat.NV21: return "NV21"; + case ImageFormat.NV16: return "NV16"; + case ImageFormat.JPEG: return "JPEG"; + case ImageFormat.YUY2: return "YUY2"; + case ImageFormat.YUV_420_888: return "YUV_420_888"; + case ImageFormat.YUV_422_888: return "YUV_422_888"; + case ImageFormat.YUV_444_888: return "YUV_444_888"; + case ImageFormat.RAW10: return "RAW10"; + case ImageFormat.RAW12: return "RAW12"; + case ImageFormat.RAW_SENSOR: return "RAW_SENSOR"; + } + return super.toString(value); + } } }