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 @@
+
+
+
+
+