From 10b8889fd0140bf8b811ccd513c3afcb34d84732 Mon Sep 17 00:00:00 2001 From: MRSa Date: Sat, 18 Sep 2021 23:38:30 +0900 Subject: [PATCH] =?utf8?q?OMDS=20camera=E3=81=AE=E3=83=A9=E3=82=A4?= =?utf8?q?=E3=83=96=E3=83=93=E3=83=A5=E3=83=BC=EF=BC=86=E6=92=AE=E5=BD=B1?= =?utf8?q?=E3=82=92=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?utf8?q?=E3=81=99=E3=82=8B=E3=80=82(OPC=E3=81=AF=E3=81=BE=E3=81=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 8 ++++++++ .../gokigenassets/camera/console/ConsolePanelControl.kt | 2 ++ .../camera/vendor/omds/OmdsCameraControl.kt | 10 +++------- .../vendor/omds/connection/OmdsCameraConnectSequence.kt | 7 +++++-- .../vendor/omds/connection/OmdsCameraConnection.kt | 14 ++++++++++++-- .../camera/vendor/omds/liveview/IOmdsLiveViewControl.kt | 7 +++++++ .../camera/vendor/omds/liveview/OmdsLiveViewControl.kt | 17 +++++++++++------ .../camera/vendor/omds/status/IOmdsCommunicationInfo.kt | 6 ++++++ .../vendor/omds/status/OmdsCameraStatusWatcher.kt | 9 ++++++++- .../gokigenassets/constants/ICameraConnectionMethods.kt | 2 ++ .../java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt | 8 ++++++++ app/src/main/res/values-ja/arrays.xml | 6 ++---- app/src/main/res/values/arrays.xml | 6 ++---- 13 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/IOmdsLiveViewControl.kt create mode 100644 app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/IOmdsCommunicationInfo.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index b9d1ffe..1bfd1d9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,6 +5,14 @@ + + + diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/console/ConsolePanelControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/console/ConsolePanelControl.kt index baf490b..8a0a2c3 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/console/ConsolePanelControl.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/console/ConsolePanelControl.kt @@ -31,6 +31,7 @@ import jp.osdn.gokigen.gokigenassets.camera.vendor.theta.status.ICaptureModeRece import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_PREFERENCE_ARRAY_CAMERA_METHOD import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert.Companion.ID_PREFERENCE_ARRAY_CAMERA_METHOD_VALUE import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_CAMERAX +import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_OMDS import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PANASONIC import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PENTAX import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PIXPRO @@ -597,6 +598,7 @@ class ConsolePanelControl (private val context: AppCompatActivity, private val v PREFERENCE_CAMERA_METHOD_PANASONIC -> true PREFERENCE_CAMERA_METHOD_SONY -> true PREFERENCE_CAMERA_METHOD_PIXPRO -> true + PREFERENCE_CAMERA_METHOD_OMDS -> true else -> false } } diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/OmdsCameraControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/OmdsCameraControl.kt index 85dac68..8560424 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/OmdsCameraControl.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/OmdsCameraControl.kt @@ -14,7 +14,6 @@ import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.status.OmdsCameraStatusW import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.wrapper.OmdsCaptureControl import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.wrapper.OmdsFocusControl import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert -import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert import jp.osdn.gokigen.gokigenassets.liveview.ICachePositionProvider import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl import jp.osdn.gokigen.gokigenassets.liveview.ILiveView @@ -30,12 +29,12 @@ class OmdsCameraControl(private val context: AppCompatActivity, private val vibr { private val liveViewListener = CameraLiveViewListenerImpl(context, informationNotify) private val statusChecker = OmdsCameraStatusWatcher() - private val cameraConnection = OmdsCameraConnection(context, provider) private val runModeControl = OmdsRunModeControl() private val zoomLensControl = OmdsZoomLensControl(statusChecker) private val storeImage = StoreImage(context, liveViewListener) + private val liveViewControl = OmdsLiveViewControl(liveViewListener, statusChecker) + private val cameraConnection = OmdsCameraConnection(context, provider, statusChecker, liveViewControl) - private lateinit var liveViewControl : OmdsLiveViewControl private lateinit var cachePositionProvider : ICachePositionProvider private lateinit var focusControl: OmdsFocusControl private lateinit var captureControl: OmdsCaptureControl @@ -88,10 +87,7 @@ class OmdsCameraControl(private val context: AppCompatActivity, private val vibr { try { - if (::liveViewControl.isInitialized) - { - liveViewControl.stopLiveView() - } + liveViewControl.stopLiveView() statusChecker.stopStatusWatch() cameraConnection.disconnect(false) cameraConnection.stopWatchWifiStatus(context) diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnectSequence.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnectSequence.kt index f30a7bc..634bd69 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnectSequence.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnectSequence.kt @@ -5,12 +5,13 @@ import androidx.appcompat.app.AppCompatActivity import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnection import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnectionStatus import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver +import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.status.IOmdsCommunicationInfo import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient import java.lang.Exception import java.util.HashMap -class OmdsCameraConnectSequence(private val context: AppCompatActivity, private val cameraStatusReceiver: ICameraStatusReceiver, private val cameraConnection : ICameraConnection, private val liveViewQuality : String, userAgent : String, private val executeUrl : String) : Runnable +class OmdsCameraConnectSequence(private val context: AppCompatActivity, private val cameraStatusReceiver: ICameraStatusReceiver, private val cameraConnection : ICameraConnection, private val communicationInfo: IOmdsCommunicationInfo, private val liveViewQuality : String, userAgent : String, private val executeUrl : String) : Runnable { private val headerMap: MutableMap = HashMap() private val http = SimpleHttpClient() @@ -30,7 +31,9 @@ class OmdsCameraConnectSequence(private val context: AppCompatActivity, private if (response.isNotEmpty()) { val response2: String = http.httpGetWithHeader(getCommandListUrl, headerMap, null, TIMEOUT_MS) ?: "" - Log.v(TAG, " $getCommandListUrl $response2") + Log.v(TAG, " $getCommandListUrl (${response2.length})") + communicationInfo.setOmdsCommandList(response2) + val response3: String = http.httpGetWithHeader(camInfoUrl, headerMap, null, TIMEOUT_MS) ?: "" Log.v(TAG, " $camInfoUrl $response3") diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnection.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnection.kt index cd5d0df..7d6ef12 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnection.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/connection/OmdsCameraConnection.kt @@ -8,15 +8,18 @@ import android.util.Log import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import jp.osdn.gokigen.gokigenassets.camera.interfaces.* +import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.liveview.IOmdsLiveViewControl +import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.status.IOmdsCommunicationInfo import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert import java.lang.Exception import java.util.concurrent.Executor import java.util.concurrent.Executors -class OmdsCameraConnection(private val context: AppCompatActivity, private val statusReceiver: ICameraStatusReceiver, private val liveViewQuality : String = "0640x0480", private val userAgent : String = "OlympusCameraKit", private val executeUrl : String = "http://192.168.0.10") : ICameraConnection, ICameraConnectionStatus +class OmdsCameraConnection(private val context: AppCompatActivity, private val statusReceiver: ICameraStatusReceiver, private val communicationInfo: IOmdsCommunicationInfo, private val liveViewControl: IOmdsLiveViewControl, private val liveViewQuality : String = "0640x0480", private val userAgent : String = "OlympusCameraKit", private val executeUrl : String = "http://192.168.0.10") : ICameraConnection, ICameraConnectionStatus { private val cameraExecutor: Executor = Executors.newFixedThreadPool(1) private var connectionStatus: ICameraConnectionStatus.CameraConnectionStatus = ICameraConnectionStatus.CameraConnectionStatus.UNKNOWN + private val connectionReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) @@ -154,6 +157,13 @@ class OmdsCameraConnection(private val context: AppCompatActivity, private val s { Log.v(TAG, "forceUpdateConnectionStatus()") connectionStatus = status + + when (status) + { + ICameraConnectionStatus.CameraConnectionStatus.CONNECTED -> { liveViewControl.startOmdsLiveView() } + ICameraConnectionStatus.CameraConnectionStatus.DISCONNECTED -> { liveViewControl.stopOmdsLiveView() } + else -> { } + } } /** @@ -181,7 +191,7 @@ class OmdsCameraConnection(private val context: AppCompatActivity, private val s connectionStatus = ICameraConnectionStatus.CameraConnectionStatus.CONNECTING try { - cameraExecutor.execute(OmdsCameraConnectSequence(context, statusReceiver, this, liveViewQuality, userAgent, executeUrl)) + cameraExecutor.execute(OmdsCameraConnectSequence(context, statusReceiver, this, communicationInfo, liveViewQuality, userAgent, executeUrl)) } catch (e: Exception) { diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/IOmdsLiveViewControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/IOmdsLiveViewControl.kt new file mode 100644 index 0000000..b7c5a15 --- /dev/null +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/IOmdsLiveViewControl.kt @@ -0,0 +1,7 @@ +package jp.osdn.gokigen.gokigenassets.camera.vendor.omds.liveview + +interface IOmdsLiveViewControl +{ + fun startOmdsLiveView() + fun stopOmdsLiveView() +} diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/OmdsLiveViewControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/OmdsLiveViewControl.kt index 98bdb2e..8a72bf7 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/OmdsLiveViewControl.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/liveview/OmdsLiveViewControl.kt @@ -1,11 +1,9 @@ package jp.osdn.gokigen.gokigenassets.camera.vendor.omds.liveview import android.util.Log -import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusUpdateNotify import jp.osdn.gokigen.gokigenassets.camera.interfaces.ILiveViewController import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.status.OmdsCameraStatusWatcher import jp.osdn.gokigen.gokigenassets.liveview.image.IImageDataReceiver -import jp.osdn.gokigen.gokigenassets.liveview.message.IMessageDrawer import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient import java.io.ByteArrayOutputStream import java.lang.Exception @@ -15,11 +13,9 @@ import java.util.* class OmdsLiveViewControl(private val imageDataReceiver: IImageDataReceiver, private val statusWatcher: OmdsCameraStatusWatcher, - private val indicator: IMessageDrawer?, - private val notifier: ICameraStatusUpdateNotify?, userAgent: String = "OlympusCameraKit", private val executeUrl : String = "http://192.168.0.10", - ) : ILiveViewController + ) : ILiveViewController, IOmdsLiveViewControl { private val headerMap: MutableMap = HashMap() private val http = SimpleHttpClient() @@ -51,7 +47,6 @@ class OmdsLiveViewControl(private val imageDataReceiver: IImageDataReceiver, } }) thread.start() - statusWatcher.startStatusWatch(indicator, notifier) } catch (e: Exception) { @@ -255,6 +250,16 @@ class OmdsLiveViewControl(private val imageDataReceiver: IImageDataReceiver, } } + override fun startOmdsLiveView() + { + startLiveView() + } + + override fun stopOmdsLiveView() + { + stopLiveView() + } + init { headerMap["User-Agent"] = userAgent // "OlympusCameraKit" // "OI.Share" diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/IOmdsCommunicationInfo.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/IOmdsCommunicationInfo.kt new file mode 100644 index 0000000..feca2cf --- /dev/null +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/IOmdsCommunicationInfo.kt @@ -0,0 +1,6 @@ +package jp.osdn.gokigen.gokigenassets.camera.vendor.omds.status + +interface IOmdsCommunicationInfo +{ + fun setOmdsCommandList(commandList: String) +} diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCameraStatusWatcher.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCameraStatusWatcher.kt index dab76c9..1b39086 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCameraStatusWatcher.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCameraStatusWatcher.kt @@ -9,13 +9,20 @@ import jp.osdn.gokigen.gokigenassets.liveview.message.IMessageDrawer import java.lang.Exception import kotlin.collections.ArrayList -class OmdsCameraStatusWatcher : ICameraStatusWatcher, ICameraStatus +class OmdsCameraStatusWatcher : ICameraStatusWatcher, ICameraStatus, IOmdsCommunicationInfo { private var buffer: ByteArray? = null private var isWatching = false private var statusReceived = false private var notifier: ICameraStatusUpdateNotify? = null private var focusingStatus = 0 + private var omdsCommandList : String = "" + + override fun setOmdsCommandList(commandList: String) + { + Log.v(TAG, " setOmdsCommandList() : $commandList") + omdsCommandList = commandList + } fun setRtpHeader(byteBuffer: ByteArray?) { diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/constants/ICameraConnectionMethods.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/constants/ICameraConnectionMethods.kt index eaca83e..3c80580 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/constants/ICameraConnectionMethods.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/constants/ICameraConnectionMethods.kt @@ -14,5 +14,7 @@ interface ICameraConnectionMethods const val PREFERENCE_CAMERA_METHOD_PANASONIC = "PANASONIC" const val PREFERENCE_CAMERA_METHOD_SONY = "SONY" const val PREFERENCE_CAMERA_METHOD_PIXPRO = "PIXPRO" + const val PREFERENCE_CAMERA_METHOD_OMDS = "OMDS" + } } diff --git a/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt b/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt index 3fa13b3..c4160ba 100644 --- a/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt +++ b/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt @@ -9,6 +9,7 @@ import jp.osdn.gokigen.gokigenassets.camera.vendor.camerax.operation.CameraContr import jp.osdn.gokigen.gokigenassets.camera.console.ConsolePanelControl import jp.osdn.gokigen.gokigenassets.camera.example.ExamplePictureControl import jp.osdn.gokigen.gokigenassets.camera.interfaces.* +import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.OmdsCameraControl import jp.osdn.gokigen.gokigenassets.camera.vendor.panasonic.wrapper.PanasonicCameraControl import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.PixproCameraControl import jp.osdn.gokigen.gokigenassets.camera.vendor.ricohpentax.RicohPentaxCameraControl @@ -18,6 +19,7 @@ import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companio import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_CONSOLE import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_EXAMPLE import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_NONE +import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_OMDS import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PANASONIC import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PENTAX import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PIXPRO @@ -118,6 +120,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform PREFERENCE_CAMERA_METHOD_PANASONIC -> preparePanasonicCameraControl(cameraPreference) PREFERENCE_CAMERA_METHOD_SONY -> prepareSonyCameraControl(cameraPreference) PREFERENCE_CAMERA_METHOD_PIXPRO -> preparePixproCameraControl(cameraPreference) + PREFERENCE_CAMERA_METHOD_OMDS -> prepareOmdsCameraControl(cameraPreference) else -> DummyCameraControl() }) } @@ -238,6 +241,11 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform return (PixproCameraControl(activity, vibrator, informationNotify, cameraPreference, statusReceiver)) } + private fun prepareOmdsCameraControl(cameraPreference : ICameraPreferenceProvider) : ICameraControl + { + return (OmdsCameraControl(activity, vibrator, informationNotify, cameraPreference, statusReceiver)) + } + private fun prepareConsolePanelControl(cameraPreference : ICameraPreferenceProvider) : ICameraControl { return (ConsolePanelControl(activity, vibrator, informationNotify, cameraPreference)) diff --git a/app/src/main/res/values-ja/arrays.xml b/app/src/main/res/values-ja/arrays.xml index 2ac3025..e9b0b1c 100644 --- a/app/src/main/res/values-ja/arrays.xml +++ b/app/src/main/res/values-ja/arrays.xml @@ -24,9 +24,8 @@ Panasonic Sony PIXPRO WPZ2 + OMDS(OM-D/Pen/Air)