OSDN Git Service

a01fでの変更分をa01eにフィードバック。(cameraxのズーム機能)
authorMRSa <mrsa@myad.jp>
Tue, 3 May 2022 14:21:51 +0000 (23:21 +0900)
committerMRSa <mrsa@myad.jp>
Tue, 3 May 2022 14:21:51 +0000 (23:21 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/camerax/operation/CameraXCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/camerax/operation/CameraZoomLensControl.kt [new file with mode: 0644]

index ea8e670..f7493d1 100644 (file)
@@ -10,6 +10,8 @@ import androidx.camera.camera2.interop.Camera2CameraInfo
 import androidx.camera.core.ExposureState
 import androidx.camera.core.FocusMeteringAction
 import androidx.camera.core.SurfaceOrientedMeteringPointFactory
+import androidx.camera.core.ZoomState
+import androidx.lifecycle.LiveData
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.IDisplayInjector
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.IFocusingControl
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.IFocusingModeNotify
@@ -176,6 +178,40 @@ class CameraXCameraControl : IFocusingControl, IDisplayInjector
         return (null)
     }
 
+    fun getZoomState() : LiveData<ZoomState>?
+    {
+        try
+        {
+            if (::cameraXCameraInfo.isInitialized)
+            {
+                return (cameraXCameraInfo.zoomState)
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (null)
+    }
+
+    fun setZoomRatio(zoomRatio : Float) : Boolean
+    {
+        try
+        {
+            if (::cameraXCameraInfo.isInitialized)
+            {
+                cameraXCameraControl.setZoomRatio(zoomRatio)
+                return (true)
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (false)
+    }
+
+
     fun setExposureCompensation(indexValue : Int)
     {
         try
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/camerax/operation/CameraZoomLensControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/camerax/operation/CameraZoomLensControl.kt
new file mode 100644 (file)
index 0000000..be796d4
--- /dev/null
@@ -0,0 +1,94 @@
+package jp.osdn.gokigen.gokigenassets.camera.vendor.camerax.operation
+
+import android.util.Log
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.IZoomLensControl
+
+
+class CameraZoomLensControl(private val cameraXCameraControl: CameraXCameraControl) : IZoomLensControl
+{
+    private var isDrivingZoom = false
+    private var minimumZoomRatio : Float = cameraXCameraControl.getZoomState()?.value?.minZoomRatio ?: 1.0f
+    private var maximumZoomRatio : Float = cameraXCameraControl.getZoomState()?.value?.maxZoomRatio ?: 1.0f
+    private var currentZoomRatio = minimumZoomRatio
+    private var zoomStepRatio : Float = (maximumZoomRatio - minimumZoomRatio) / 5.0f
+
+    override fun canZoom(): Boolean
+    {
+        val zoomState = cameraXCameraControl.getZoomState()
+        Log.v(TAG, " -=-=-=-=-=- getZoomState() : ${zoomState?.value} -=-=-=-=-=- ")
+        minimumZoomRatio = cameraXCameraControl.getZoomState()?.value?.minZoomRatio ?: 1.0f
+        maximumZoomRatio = cameraXCameraControl.getZoomState()?.value?.maxZoomRatio ?: 1.0f
+        zoomStepRatio = (maximumZoomRatio - minimumZoomRatio) / 5.0f
+        return (true)
+    }
+
+    override fun updateStatus()
+    {
+        //
+    }
+
+    override fun getMaximumFocalLength(): Float
+    {
+        return (maximumZoomRatio)
+    }
+
+    override fun getMinimumFocalLength(): Float
+    {
+       return (minimumZoomRatio)
+    }
+
+    override fun getCurrentFocalLength(): Float
+    {
+        return (currentZoomRatio)
+    }
+
+    override fun driveZoomLens(targetLength: Float)
+    {
+        Log.v(TAG, " driveZoomLens($targetLength)")
+    }
+
+    override fun driveZoomLens(isZoomIn: Boolean)
+    {
+        try
+        {
+            if (isZoomIn)
+            {
+                currentZoomRatio += zoomStepRatio
+                if (currentZoomRatio > maximumZoomRatio)
+                {
+                    currentZoomRatio = maximumZoomRatio
+                }
+            }
+            else
+            {
+                currentZoomRatio -= zoomStepRatio
+                if (currentZoomRatio < minimumZoomRatio)
+                {
+                    currentZoomRatio = minimumZoomRatio
+                }
+            }
+            Log.v(TAG, " driveZoomLens(zoomStepRatio = $zoomStepRatio, zoomRatio = $currentZoomRatio, isZoomIn = $isZoomIn)")
+            cameraXCameraControl.setZoomRatio(currentZoomRatio)
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    override fun moveInitialZoomPosition()
+    {
+        Log.v(TAG, " moveInitialZoomPosition()")
+    }
+
+    override fun isDrivingZoomLens(): Boolean
+    {
+        return (isDrivingZoom)
+    }
+
+    companion object
+    {
+        private val TAG = CameraZoomLensControl::class.java.simpleName
+    }
+
+}