OSDN Git Service

いったん保管。
authorMRSa <mrsa@myad.jp>
Sat, 24 Jul 2021 13:52:23 +0000 (22:52 +0900)
committerMRSa <mrsa@myad.jp>
Sat, 24 Jul 2021 13:52:23 +0000 (22:52 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/camerax/operation/CameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/camerax/operation/CameraXCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/camerax/operation/CameraXCameraStatusHolder.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/console/ConsolePanelControl.kt

index 79de283..660a94b 100644 (file)
@@ -34,7 +34,7 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
     private lateinit var cameraXCamera : Camera
     private var cameraIsStarted = false
     private val cameraXCameraControl = CameraXCameraControl()
-    private val cameraXCameraStatusHolder = CameraXCameraStatusHolder()
+    private val cameraXCameraStatusHolder = CameraXCameraStatusHolder(cameraXCameraControl)
     private val clickKeyDownListeners = mutableMapOf<Int, CameraClickKeyDownListener>()
     private val cachePositionProviders = mutableMapOf<Int, ICachePositionProvider>()
 
@@ -128,7 +128,7 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
             {
                 cameraProvider.unbindAll()
                 cameraXCamera = cameraProvider.bindToLifecycle(activity, cameraSelector, preview, imageCapture)
-                cameraXCameraControl.setCameraControl(cameraXCamera.cameraControl)
+                cameraXCameraControl.setCameraControl(cameraXCamera)
             }
             catch(e : Exception)
             {
@@ -203,7 +203,7 @@ class CameraControl(private val activity : AppCompatActivity, private val prefer
                 }
                 cameraProvider.unbindAll()
                 cameraXCamera = cameraProvider.bindToLifecycle(activity, cameraSelector, imageCapture, imageAnalyzer)
-                cameraXCameraControl.setCameraControl(cameraXCamera.cameraControl)
+                cameraXCameraControl.setCameraControl(cameraXCamera)
             }
             catch(e : Exception)
             {
index 1ba65c8..74ed00a 100644 (file)
@@ -1,9 +1,13 @@
 package jp.osdn.gokigen.gokigenassets.camera.camerax.operation
 
+import android.annotation.SuppressLint
 import android.graphics.PointF
 import android.graphics.RectF
 import android.util.Log
 import android.view.MotionEvent
+import androidx.camera.camera2.interop.Camera2CameraControl
+import androidx.camera.camera2.interop.Camera2CameraInfo
+import androidx.camera.core.ExposureState
 import androidx.camera.core.FocusMeteringAction
 import androidx.camera.core.SurfaceOrientedMeteringPointFactory
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.IDisplayInjector
@@ -17,6 +21,7 @@ class CameraXCameraControl : IFocusingControl, IDisplayInjector
     private var isCameraControlPrepared: Boolean = false
     private var isFrameDisplayPrepared: Boolean = false
     private lateinit var cameraXCameraControl: androidx.camera.core.CameraControl
+    private lateinit var cameraXCameraInfo: androidx.camera.core.CameraInfo
     private lateinit var frameDisplay: IAutoFocusFrameDisplay
     private lateinit var indicatorControl: IIndicatorControl
     private lateinit var focusModeNotify: IFocusingModeNotify
@@ -26,9 +31,10 @@ class CameraXCameraControl : IFocusingControl, IDisplayInjector
         private val TAG = CameraXCameraControl::class.java.simpleName
     }
 
-    fun setCameraControl(cameraControl: androidx.camera.core.CameraControl)
+    fun setCameraControl(camera:  androidx.camera.core.Camera)
     {
-        cameraXCameraControl = cameraControl
+        cameraXCameraControl = camera.cameraControl
+        cameraXCameraInfo = camera.cameraInfo
         isCameraControlPrepared = true
     }
 
@@ -153,4 +159,58 @@ class CameraXCameraControl : IFocusingControl, IDisplayInjector
         frameDisplay.showFocusFrame(rect, status, duration)
         indicatorControl.onAfLockUpdate(IAutoFocusFrameDisplay.FocusFrameStatus.Focused === status)
     }
+
+    fun getExposureState() : ExposureState?
+    {
+        try
+        {
+            if (::cameraXCameraInfo.isInitialized)
+            {
+                return (cameraXCameraInfo.exposureState)
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (null)
+    }
+
+    @SuppressLint("UnsafeOptInUsageError")
+    fun getCamera2CameraInfo() : Camera2CameraInfo?
+    {
+        try
+        {
+            if (::cameraXCameraInfo.isInitialized)
+            {
+                return (Camera2CameraInfo.from(cameraXCameraInfo))
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (null)
+    }
+
+
+    @SuppressLint("UnsafeOptInUsageError")
+    fun getCamera2CameraControl() : Camera2CameraControl?
+    {
+        try
+        {
+            if (::cameraXCameraControl.isInitialized)
+            {
+                return (Camera2CameraControl.from(cameraXCameraControl))
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (null)
+    }
+
+
+
 }
index 3380902..5a5950a 100644 (file)
@@ -1,10 +1,20 @@
 package jp.osdn.gokigen.gokigenassets.camera.camerax.operation
 
+import android.annotation.SuppressLint
 import android.graphics.Color
+import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CaptureRequest.*
+import android.util.Log
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatus
 
-class CameraXCameraStatusHolder : ICameraStatus
+class CameraXCameraStatusHolder(private val cameraXCameraControl: CameraXCameraControl) : ICameraStatus
 {
+    companion object
+    {
+        private val TAG = CameraXCameraStatusHolder::class.java.simpleName
+    }
+
+
     override fun getStatusList(key: String): List<String?>
     {
         return (ArrayList<String>())
@@ -33,8 +43,57 @@ class CameraXCameraStatusHolder : ICameraStatus
         return (Color.WHITE)
     }
 
+    @SuppressLint("UnsafeOptInUsageError")
     private fun getTakeMode() : String
     {
+/*
+        try
+        {
+            val cameraControl = cameraXCameraControl.getCamera2CameraControl()
+            if (cameraControl != null)
+            {
+                Log.v(TAG, "  -========-")
+                val captureOptions = cameraControl.captureRequestOptions
+                // https://developer.android.com/reference/android/hardware/camera2/CaptureRequest
+                //val controlMode = captureOptions.getCaptureRequestOption(CONTROL_MODE)
+                //val controlMode = captureOptions.getCaptureRequestOption(CONTROL_AE_MODE)
+                //val controlMode = captureOptions.getCaptureRequestOption(CONTROL_AF_MODE)
+                //val controlMode = captureOptions.getCaptureRequestOption(LENS_APERTURE)
+                //val controlMode = captureOptions.getCaptureRequestOption(SENSOR_SENSITIVITY)
+                //val controlMode = captureOptions.getCaptureRequestOption(TONEMAP_MODE)
+                //val controlMode = captureOptions.getCaptureRequestOption(SENSOR_EXPOSURE_TIME)
+                //val controlMode = captureOptions.getCaptureRequestOption(CONTROL_EFFECT_MODE)
+                val controlMode = captureOptions.getCaptureRequestOption(CONTROL_SCENE_MODE)
+                Log.v(TAG, "  Control Mode : $controlMode")
+
+                Log.v(TAG, "  -========-")
+                //return ("$controlMode")
+            }
+            val cameraInfo = cameraXCameraControl.getCamera2CameraInfo()
+            if (cameraInfo != null)
+            {
+                Log.v(TAG, "  ---  ---  ---")
+                val effect = cameraInfo.getCameraCharacteristic(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS)
+                if (effect != null)
+                {
+                    for (eValue in effect)
+                    {
+                        Log.v(TAG, "getTakeMode : $eValue")
+                    }
+                }
+                //val hwLevel = cameraInfo.getCameraCharacteristic(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
+                //Log.v(TAG, "Hardware Level : $hwLevel")
+                //val orientation = cameraInfo.getCameraCharacteristic(CameraCharacteristics.SENSOR_ORIENTATION)
+                //Log.v(TAG, "Sensor Orientation : $orientation")
+
+                Log.v(TAG, "  ---  ---  ---")
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+*/
         return ("")
     }
 
@@ -50,6 +109,25 @@ class CameraXCameraStatusHolder : ICameraStatus
 
     private fun getExpRev() : String
     {
+        try
+        {
+            // ExposureCompensation : ExpRev
+            val exposureState = cameraXCameraControl.getExposureState()
+            if ((exposureState != null)&&(exposureState.isExposureCompensationSupported))
+            {
+                val index = exposureState.exposureCompensationIndex
+                val step = exposureState.exposureCompensationStep
+                val value = index.toDouble() * step.toDouble()
+                if (value != 0.0)
+                {
+                    return (String.format("2.1f", value))
+                }
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
         return ("")
     }
 
@@ -78,8 +156,24 @@ class CameraXCameraStatusHolder : ICameraStatus
         return ("")
     }
 
+
+    @SuppressLint("UnsafeOptInUsageError")
     private fun getRemainBattery() : String
     {
+        try
+        {
+
+            val cameraInfo = cameraXCameraControl.getCamera2CameraInfo()
+            if (cameraInfo != null)
+            {
+                val hwLevel = cameraInfo.getCameraCharacteristic(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
+                return ("ID: ${cameraInfo.cameraId}  (L$hwLevel)")
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
         return ("")
     }
 
index 58c9f34..0b7ff96 100644 (file)
@@ -463,7 +463,7 @@ class ConsolePanelControl (private val context: AppCompatActivity, private val v
             {
                 methodName = getConnectionMethodName(method)
             }
-            drawString(canvas, rect, "$currentCameraControlId : $methodName", Color.WHITE)
+            drawString(canvas, rect, "${currentCameraControlId + 1}: $methodName", Color.WHITE)
         }
         catch (e : Exception)
         {
@@ -652,7 +652,7 @@ class ConsolePanelControl (private val context: AppCompatActivity, private val v
         val widthPosition = (touchedX / canvasWidth).toInt()
         val heightPosition = (touchedY / canvasHeight).toInt()
 
-        Log.v(TAG, "   ----- POSITION : $widthPosition, $heightPosition")
+        // Log.v(TAG, "   ----- POSITION : $widthPosition, $heightPosition")
 
         //  長押しした場所に合わせて処理を切り替える
         if ((widthPosition == 0)&&(heightPosition == 8))