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>()
{
cameraProvider.unbindAll()
cameraXCamera = cameraProvider.bindToLifecycle(activity, cameraSelector, preview, imageCapture)
- cameraXCameraControl.setCameraControl(cameraXCamera.cameraControl)
+ cameraXCameraControl.setCameraControl(cameraXCamera)
}
catch(e : Exception)
{
}
cameraProvider.unbindAll()
cameraXCamera = cameraProvider.bindToLifecycle(activity, cameraSelector, imageCapture, imageAnalyzer)
- cameraXCameraControl.setCameraControl(cameraXCamera.cameraControl)
+ cameraXCameraControl.setCameraControl(cameraXCamera)
}
catch(e : Exception)
{
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
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
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
}
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)
+ }
+
+
+
}
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>())
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 ("")
}
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 ("")
}
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 ("")
}
{
methodName = getConnectionMethodName(method)
}
- drawString(canvas, rect, "$currentCameraControlId : $methodName", Color.WHITE)
+ drawString(canvas, rect, "${currentCameraControlId + 1}: $methodName", Color.WHITE)
}
catch (e : Exception)
{
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))