From 86298f8d3083e2b119ae24522165565e0d93f5b0 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Thu, 28 Nov 2019 18:29:48 +0100 Subject: [PATCH] Add PictureFormat definition --- .../cameraview/CameraViewTest.java | 10 ++++ .../cameraview/controls/ControlParser.java | 8 +++ .../cameraview/controls/PictureFormat.java | 53 +++++++++++++++++++ cameraview/src/main/res/values/attrs.xml | 5 ++ 4 files changed, 76 insertions(+) create mode 100644 cameraview/src/main/java/com/otaliastudios/cameraview/controls/PictureFormat.java diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java index e92d19ff..09374b58 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java @@ -20,6 +20,7 @@ import com.otaliastudios.cameraview.controls.ControlParser; import com.otaliastudios.cameraview.controls.Engine; import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Flash; +import com.otaliastudios.cameraview.controls.PictureFormat; import com.otaliastudios.cameraview.controls.Preview; import com.otaliastudios.cameraview.engine.CameraEngine; import com.otaliastudios.cameraview.filter.Filter; @@ -161,6 +162,7 @@ public class CameraViewTest extends BaseTest { assertEquals(cameraView.getHdr(), controls.getHdr()); assertEquals(cameraView.getAudio(), controls.getAudio()); assertEquals(cameraView.getVideoCodec(), controls.getVideoCodec()); + assertEquals(cameraView.getPictureFormat(), controls.getPictureFormat()); //noinspection SimplifiableJUnitAssertion assertEquals(cameraView.getLocation(), null); assertEquals(cameraView.getExposureCorrection(), 0f, 0f); @@ -745,6 +747,14 @@ public class CameraViewTest extends BaseTest { assertEquals(cameraView.get(VideoCodec.class), VideoCodec.H_264); } + @Test + public void testPictureFormat() { + cameraView.set(PictureFormat.JPEG); + assertEquals(cameraView.get(PictureFormat.class), PictureFormat.JPEG); + cameraView.set(PictureFormat.DNG); + assertEquals(cameraView.get(PictureFormat.class), PictureFormat.DNG); + } + @Test public void testPreviewStreamSizeSelector() { SizeSelector source = SizeSelectors.minHeight(50); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/controls/ControlParser.java b/cameraview/src/main/java/com/otaliastudios/cameraview/controls/ControlParser.java index 2b733725..61f20bae 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/controls/ControlParser.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/controls/ControlParser.java @@ -23,6 +23,7 @@ public class ControlParser { private int audio; private int videoCodec; private int engine; + private int pictureFormat; public ControlParser(@NonNull Context context, @NonNull TypedArray array) { preview = array.getInteger(R.styleable.CameraView_cameraPreview, Preview.DEFAULT.value()); @@ -38,6 +39,8 @@ public class ControlParser { videoCodec = array.getInteger(R.styleable.CameraView_cameraVideoCodec, VideoCodec.DEFAULT.value()); engine = array.getInteger(R.styleable.CameraView_cameraEngine, Engine.DEFAULT.value()); + pictureFormat = array.getInteger(R.styleable.CameraView_cameraPictureFormat, + PictureFormat.DEFAULT.value()); } @NonNull @@ -90,4 +93,9 @@ public class ControlParser { public Engine getEngine() { return Engine.fromValue(engine); } + + @NonNull + public PictureFormat getPictureFormat() { + return PictureFormat.fromValue(pictureFormat); + } } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/controls/PictureFormat.java b/cameraview/src/main/java/com/otaliastudios/cameraview/controls/PictureFormat.java new file mode 100644 index 00000000..9255d078 --- /dev/null +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/controls/PictureFormat.java @@ -0,0 +1,53 @@ +package com.otaliastudios.cameraview.controls; + + +import androidx.annotation.NonNull; + +import com.otaliastudios.cameraview.CameraOptions; +import com.otaliastudios.cameraview.CameraView; + +import java.io.File; + +/** + * Format of the picture results for pictures that are taken with {@link CameraView#takePicture()}. + * This does not apply to picture snapshots. + * + * @see CameraView#setPictureFormat(PictureFormat) + */ +public enum PictureFormat implements Control { + + /** + * The picture result data will be a JPEG file. + */ + JPEG(0), + + /** + * The picture result data will be a DNG file. + * This is only supported with the {@link Engine#CAMERA2} engine and only on + * specific devices. Please check {@link CameraOptions#getSupportedPictureFormats()}. + */ + DNG(1); + + static final PictureFormat DEFAULT = JPEG; + + private int value; + + PictureFormat(int value) { + this.value = value; + } + + int value() { + return value; + } + + @NonNull + static PictureFormat fromValue(int value) { + PictureFormat[] list = PictureFormat.values(); + for (PictureFormat action : list) { + if (action.value() == value) { + return action; + } + } + return DEFAULT; + } +} diff --git a/cameraview/src/main/res/values/attrs.xml b/cameraview/src/main/res/values/attrs.xml index 8cbc871a..4411199e 100644 --- a/cameraview/src/main/res/values/attrs.xml +++ b/cameraview/src/main/res/values/attrs.xml @@ -145,6 +145,11 @@ + + + + +