OSDN Git Service

内蔵カメラの解像度を変更できるようにした。
authorMRSa <mrsa@myad.jp>
Mon, 28 Jun 2021 14:27:07 +0000 (23:27 +0900)
committerMRSa <mrsa@myad.jp>
Mon, 28 Jun 2021 14:27:07 +0000 (23:27 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/camerax/operation/CameraControl.kt
app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt

index 9d92f1f..aa545e8 100644 (file)
@@ -1,6 +1,7 @@
 package jp.osdn.gokigen.gokigenassets.camera.camerax.operation
 
 import android.util.Log
+import android.util.Size
 import android.view.Surface
 import android.view.View
 import androidx.appcompat.app.AppCompatActivity
@@ -151,17 +152,52 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
 */
             //val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
             val imageCapture = fileControl.prepare()
-
+            val option1 = preference.getCameraOption1()  // プレビューサイズを設定する
+            val previewSize = if (option1.isNotBlank()) {
+                when (option1) {
+                    "_4K"   -> Size(4096, 2160)
+                    "_WQHD" -> Size(2560, 1440)
+                    "_2K" -> Size(2048, 1080)
+                    "_FHD" -> Size(1920, 1080)
+                    "_SXGA" -> Size(1280, 1024) // SXGA : 1600x1200 @ Pixel3a
+                    "_XGA" -> Size(1024, 768)   // XGA  : 1600x1200 @ Pixel3a
+                    "_SVGA" -> Size(800, 600)   // SVGA : 1280x960  @ Pixel3a
+                    "_VGA" -> Size(640, 480)   // SVGA : 1280x960  @ Pixel3a
+                    "4K"   -> Size(2160, 4096)
+                    "WQHD" -> Size(1440, 2560)
+                    "2K" -> Size(1080, 2048)
+                    "FHD" -> Size(1080, 1920)
+                    "SXGA" -> Size(1024, 1280)
+                    "XGA" -> Size(768, 1024)
+                    "SVGA" -> Size(600, 800)
+                    "VGA" -> Size(480, 640)
+                    else -> Size(480, 640)     // VGA : 1024x768   @ Pixel3a
+                }
+            }
+            else
+            {
+                Size(640, 480)
+            }
             try
             {
-                val imageAnalyzer = ImageAnalysis.Builder()
-                    //.setTargetResolution(Size(800, 600))
-                    .setTargetRotation(getImageRotation())
-                    .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
-                    .build()
-                    .also {
-                        it.setAnalyzer(cameraExecutor, liveViewListener)
-                    }
+                val imageAnalyzer = if (option1.isNotBlank()) {
+                    ImageAnalysis.Builder()
+                        .setTargetResolution(previewSize)
+                        .setTargetRotation(getImageRotation())
+                        .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
+                        .build()
+                        .also {
+                            it.setAnalyzer(cameraExecutor, liveViewListener)
+                        }
+                } else {
+                    ImageAnalysis.Builder()
+                        .setTargetRotation(getImageRotation())
+                        .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
+                        .build()
+                        .also {
+                            it.setAnalyzer(cameraExecutor, liveViewListener)
+                        }
+                }
                 cameraProvider.unbindAll()
                 cameraProvider.bindToLifecycle(activity, cameraSelector, imageCapture, imageAnalyzer)
             }
@@ -170,6 +206,7 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
                 Log.e(TAG, "Use case binding failed", e)
                 e.printStackTrace()
             }
+
         }, ContextCompat.getMainExecutor(activity))
     }
 
index 6bc0666..7eb552e 100644 (file)
@@ -77,7 +77,8 @@ import jp.osdn.gokigen.mangle.preference.IPreferencePropertyAccessor.Companion.P
 class CameraProvider(private val activity: AppCompatActivity, private val informationNotify: IInformationReceiver, private val vibrator : IVibrator, private val statusReceiver : ICameraStatusReceiver)
 {
     private var cameraXisCreated = false
-    private lateinit var cameraXControl: ICameraControl
+    private lateinit var cameraXControl0: ICameraControl
+    private lateinit var cameraXControl1: ICameraControl
 
     fun decideCameraControl(preferenceKey : String) : ICameraControl
     {
@@ -209,12 +210,14 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform
 
     private fun prepareCameraXControl(cameraPreference : ICameraPreferenceProvider): ICameraControl
     {
-        if ((cameraXisCreated)&&(::cameraXControl.isInitialized))
+        if ((cameraXisCreated)&&(::cameraXControl0.isInitialized))
         {
-            return (cameraXControl)
+            cameraXControl1 = CameraControl(activity, cameraPreference, vibrator)
+            cameraXisCreated = true
+            return (cameraXControl1)
         }
-        cameraXControl = CameraControl(activity, cameraPreference, vibrator)
+        cameraXControl0 = CameraControl(activity, cameraPreference, vibrator)
         cameraXisCreated = true
-        return (cameraXControl)
+        return (cameraXControl0)
     }
 }
\ No newline at end of file