Skip to content

Commit 6f583fc

Browse files
committed
Add fields and methods in CamConfig
(to support image format mode)
1 parent c277ef8 commit 6f583fc

1 file changed

Lines changed: 49 additions & 3 deletions

File tree

app/src/main/java/app/grapheneos/camera/CamConfig.kt

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import app.grapheneos.camera.ui.showIgnoringShortEdgeMode
5151
import app.grapheneos.camera.util.edit
5252
import com.google.android.material.dialog.MaterialAlertDialogBuilder
5353
import com.google.zxing.BarcodeFormat
54+
import java.util.Collections
5455
import java.util.concurrent.ExecutionException
5556
import java.util.concurrent.Executors
5657

@@ -111,6 +112,8 @@ class CamConfig(private val mActivity: MainActivity) {
111112

112113
const val ENABLE_ZSL = "enable_zsl"
113114

115+
const val OUTPUT_IMAGE_FORMAT = "output_image_format"
116+
114117
// const val IMAGE_FILE_FORMAT = "image_quality"
115118
// const val VIDEO_FILE_FORMAT = "video_quality"
116119
}
@@ -156,6 +159,8 @@ class CamConfig(private val mActivity: MainActivity) {
156159

157160
const val ENABLE_ZSL = false
158161

162+
const val OUTPUT_IMAGE_FORMAT = "JPEG"
163+
159164
// const val IMAGE_FILE_FORMAT = ""
160165
// const val VIDEO_FILE_FORMAT = ""
161166
}
@@ -195,6 +200,13 @@ class CamConfig(private val mActivity: MainActivity) {
195200
val REAR_CAMERA_SELECTOR = CameraSelector.Builder()
196201
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
197202
.build()
203+
204+
// Array of image formats currently supported by the camera app
205+
private val supportedImageFormats = arrayOf(
206+
ImageCapture.OUTPUT_FORMAT_RAW,
207+
ImageCapture.OUTPUT_FORMAT_JPEG,
208+
ImageCapture.OUTPUT_FORMAT_JPEG_ULTRA_HDR,
209+
)
198210
}
199211

200212
var camera: Camera? = null
@@ -555,6 +567,40 @@ class CamConfig(private val mActivity: MainActivity) {
555567
editor.apply()
556568
}
557569

570+
var outputImageFormat : Int
571+
get() {
572+
return mActivity.settingsDialog.titleToImageFormat(
573+
modePref.getString(
574+
outputImageFormatKey,
575+
SettingValues.Default.OUTPUT_IMAGE_FORMAT
576+
)!!
577+
)
578+
}
579+
set(format) {
580+
val formatTitle = mActivity.settingsDialog.getTitleForImageFormat(format)
581+
582+
val editor = modePref.edit()
583+
editor.putString(outputImageFormatKey, formatTitle)
584+
editor.apply()
585+
}
586+
587+
private val outputImageFormatKey: String
588+
get() {
589+
val pf = if (lensFacing == CameraSelector.LENS_FACING_FRONT) {
590+
"FRONT"
591+
} else {
592+
"BACK"
593+
}
594+
595+
return "${SettingValues.Key.OUTPUT_IMAGE_FORMAT}_$pf"
596+
}
597+
598+
fun getAvailableImageFormats() : Set<Int> {
599+
val cameraInfo = camera?.cameraInfo ?: return Collections.emptySet()
600+
return ImageCapture.getImageCaptureCapabilities(cameraInfo)
601+
.supportedOutputFormats.filter { it in supportedImageFormats }.toSet()
602+
}
603+
558604
val isZslSupported : Boolean by lazy {
559605
camera!!.cameraInfo.isZslSupported
560606
}
@@ -710,9 +756,7 @@ class CamConfig(private val mActivity: MainActivity) {
710756
putBoolean(SettingValues.Key.GEO_TAGGING, SettingValues.Default.GEO_TAGGING)
711757
}
712758

713-
if (isVideoMode) {
714-
mActivity.settingsDialog.reloadQualities()
715-
}
759+
mActivity.settingsDialog.reloadSettings()
716760

717761
if (lensFacing == CameraSelector.LENS_FACING_FRONT) {
718762
if (!modePref.contains(SettingValues.Key.SELF_ILLUMINATION)) {
@@ -1193,6 +1237,8 @@ class CamConfig(private val mActivity: MainActivity) {
11931237
it.setJpegQuality(photoQuality)
11941238
}
11951239

1240+
it.setOutputFormat(outputImageFormat)
1241+
11961242
it.build()
11971243
}
11981244

0 commit comments

Comments
 (0)