OSDN Git Service

WPZで静止画の画像サイズを変更できるようにした。
authorMRSa <mrsa@myad.jp>
Fri, 10 Sep 2021 16:02:04 +0000 (01:02 +0900)
committerMRSa <mrsa@myad.jp>
Fri, 10 Sep 2021 16:02:04 +0000 (01:02 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/base/IPixproMessages.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/specific/PixproChangeImageSize.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/specific/PixproChangeVideoSize.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/status/PixproStatusConvert.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/status/PixproStatusHolder.kt

index b9f1df2..1d048c3 100644 (file)
@@ -22,6 +22,9 @@ interface IPixproMessages
         const val  SEQ_ISO_SENSITIVITY = 32
         const val  SEQ_SHUTTER_SPEED = 33
 
+        const val  SEQ_IMAGE_SIZE = 34
+        const val  SEQ_VIDEO_SIZE = 35
+
         const val  SEQ_CHANGE_MODE_VIDEO = 40
         const val  SEQ_CHANGE_MODE = 41
 
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/specific/PixproChangeImageSize.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/specific/PixproChangeImageSize.kt
new file mode 100644 (file)
index 0000000..a88dca7
--- /dev/null
@@ -0,0 +1,41 @@
+package jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.specific
+
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.IPixproCommandCallback
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.base.IPixproMessages
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.base.PixproCommandBase
+
+class PixproChangeImageSize(private val callback: IPixproCommandCallback, value: Int) : PixproCommandBase()
+{
+    private val data00: Byte = (0x000000ff and value).toByte()
+    private val data01: Byte = (0x0000ff00 and value shr 8).toByte()
+    private val data02: Byte = (0x00ff0000 and value shr 16).toByte()
+    private val data03: Byte = (-0x1000000 and value shr 24).toByte()
+
+    override fun getId() : Int
+    {
+        return (IPixproMessages.SEQ_IMAGE_SIZE)
+    }
+
+    override fun commandBody(): ByteArray {
+        return byteArrayOf(
+
+            0x2e.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x20.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0xed.toByte(), 0x3.toByte(), 0x0.toByte(), 0x0.toByte(), 0x1.toByte(), 0x0.toByte(), 0x0.toByte(), 0x80.toByte(),
+            0x0a.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x1.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x1.toByte(), 0x0.toByte(), 0x0.toByte(), 0x00.toByte(),
+            0x00.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x00.toByte(),
+            0x00.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x00.toByte(),
+            0x00.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x20.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0a.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x00.toByte(),
+            0x00.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x2d.toByte(), 0x54.toByte(), 0x1.toByte(), 0x0.toByte(), 0x2d.toByte(), 0x54.toByte(), 0x1.toByte(), 0x00.toByte(),
+            data00, data01, data02, data03, 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x00.toByte(),
+            0x00.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+
+            0xff.toByte(), 0xff.toByte(), 0xff.toByte(), 0xff.toByte(),
+            0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte()
+
+        )
+    }
+
+    override fun responseCallback(): IPixproCommandCallback
+    {
+        return callback
+    }
+}
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/specific/PixproChangeVideoSize.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/pixpro/wrapper/command/messages/specific/PixproChangeVideoSize.kt
new file mode 100644 (file)
index 0000000..8c6c9bf
--- /dev/null
@@ -0,0 +1,41 @@
+package jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.specific
+
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.IPixproCommandCallback
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.base.IPixproMessages
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.base.PixproCommandBase
+
+class PixproChangeVideoSize(private val callback: IPixproCommandCallback, value: Int) : PixproCommandBase()
+{
+    private val data00: Byte = (0x000000ff and value).toByte()
+    private val data01: Byte = (0x0000ff00 and value shr 8).toByte()
+    private val data02: Byte = (0x00ff0000 and value shr 16).toByte()
+    private val data03: Byte = (-0x1000000 and value shr 24).toByte()
+
+    override fun getId() : Int
+    {
+        return (IPixproMessages.SEQ_VIDEO_SIZE)
+    }
+
+    override fun commandBody(): ByteArray {
+        return byteArrayOf(
+            0x2e.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x30.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0xed.toByte(), 0x3.toByte(), 0x0.toByte(), 0x0.toByte(), 0x1.toByte(), 0x0.toByte(), 0x0.toByte(), 0x80.toByte(),
+            0x0b.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x1.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x1.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x30.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0b.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x40.toByte(), 0x1.toByte(), 0x4c.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x40.toByte(), 0x1.toByte(), 0x4c.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), data00, data01, data02, data03, 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+            0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(), 0x0.toByte(),
+
+            0xff.toByte(), 0xff.toByte(), 0xff.toByte(), 0xff.toByte(),
+            0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte()
+
+        )
+    }
+
+    override fun responseCallback(): IPixproCommandCallback
+    {
+        return callback
+    }
+}
index 73ee8e6..f75318f 100644 (file)
@@ -122,9 +122,12 @@ class PixproStatusConvert(private val statusHolder: PixproStatusHolder)
         return (listOf("AUTO", "Daylight", "Cloudy", "Fluorescent", "Fluorescent CWF", "Incandescent"))
     }
 
-    fun getAvailableMeteringMode(): List<String?>
+    fun getAvailableMeteringMode(mode: String): List<String?>
     {
-        return (ArrayList())
+        return (when (mode) {
+            "Video" -> { listOf("V1", "V2", "V3", "V4", "V5") }
+            else -> {  listOf("s1", "s2","s3", "s4", "s5", "s6", "s7", "s8") }
+        })
     }
 
     fun getAvailablePictureEffect(): List<String?>
index 650e60d..8671cd1 100644 (file)
@@ -64,7 +64,7 @@ class PixproStatusHolder
                 ICameraStatus.CAPTURE_MODE -> statusConvert.getAvailableCaptureMode()
                 ICameraStatus.ISO_SENSITIVITY -> statusConvert.getAvailableIsoSensitivity()
                 ICameraStatus.WHITE_BALANCE -> statusConvert.getAvailableWhiteBalance()
-                ICameraStatus.AE -> statusConvert.getAvailableMeteringMode()
+                ICameraStatus.AE -> statusConvert.getAvailableMeteringMode(currentTakeMode)
                 ICameraStatus.EFFECT -> statusConvert.getAvailablePictureEffect()
                 ICameraStatus.TORCH_MODE -> statusConvert.getAvailableTorchMode()
                 //ICameraStatus.BATTERY -> statusConvert.getAvailableRemainBattery()
@@ -99,7 +99,7 @@ class PixproStatusHolder
             //ICameraStatus.CAPTURE_MODE -> getCaptureMode()
             ICameraStatus.ISO_SENSITIVITY -> getIsoSensitivity()
             ICameraStatus.WHITE_BALANCE -> getWhiteBalance()
-            //ICameraStatus.AE -> getMeteringMode()
+            ICameraStatus.AE -> getMeteringMode()
             ICameraStatus.EFFECT -> getPictureEffect()
             ICameraStatus.BATTERY -> getRemainBattery()
             ICameraStatus.TORCH_MODE -> getTorchMode()
@@ -143,6 +143,11 @@ class PixproStatusHolder
         return ("WB: $currentWhiteBalance")
     }
 
+    private fun getMeteringMode() : String
+    {
+        return ("Size")
+    }
+
     private fun getPictureEffect() : String
     {
         return ("Zoom")
@@ -166,7 +171,7 @@ class PixproStatusHolder
                 //ICameraStatus.CAPTURE_MODE -> setCaptureMode(value)
                 ICameraStatus.ISO_SENSITIVITY -> setIsoSensitivity(value)
                 ICameraStatus.WHITE_BALANCE -> setWhiteBalance(value)
-                //ICameraStatus.AE -> setMeteringMode(value)
+                ICameraStatus.AE -> setMeteringMode(value)
                 ICameraStatus.EFFECT -> setPictureEffect(value)
                 ICameraStatus.TORCH_MODE -> setTorchMode(value)
                 //ICameraStatus.BATTERY -> setRemainBattery(value)
@@ -277,6 +282,42 @@ class PixproStatusHolder
         }
     }
 
+
+    private fun setMeteringMode(value: String)
+    {
+        try
+        {
+            if (!::commandPublisher.isInitialized)
+            {
+                // 未初期化の場合はコマンドを送らない
+                return
+            }
+            Log.v(TAG, " setMeteringMode($value)")
+            when (value)
+            {
+                "s1" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00010000))  // 4608x3456
+                "s2" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00004000))  // 4608x3072
+                "s3" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00001000))  // 4608x2592
+                "s4" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00000400))  // 3648x2736
+                "s5" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00000020))  // 2592x1944
+                "s6" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00000008))  // 2048x1536
+                "s7" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00000004))  // 1920x1080
+                "s8" -> commandPublisher.enqueueCommand(PixproChangeImageSize(PixproCommandOnlyCallback(), 0x00000001))  // 640x480
+                "V1" -> commandPublisher.enqueueCommand(PixproChangeVideoSize(PixproCommandOnlyCallback(), 0x00040000))
+                "V2" -> commandPublisher.enqueueCommand(PixproChangeVideoSize(PixproCommandOnlyCallback(), 0x00000040))
+                "V3" -> commandPublisher.enqueueCommand(PixproChangeVideoSize(PixproCommandOnlyCallback(), 0x00000100))
+                "V4" -> commandPublisher.enqueueCommand(PixproChangeVideoSize(PixproCommandOnlyCallback(), 0x00400000))
+                "V5" -> commandPublisher.enqueueCommand(PixproChangeVideoSize(PixproCommandOnlyCallback(), 0x00080000))
+                else -> { }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+
     private fun setIsoSensitivity(value: String)
     {
         try