import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
import jp.osdn.gokigen.gokigenassets.camera.preference.ICameraPreferenceProvider
import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.operation.FocusControl
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.operation.MovieShotControl
import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.operation.SingleShotControl
import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.IPixproCamera
import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.IPixproCameraInitializer
private lateinit var liveViewControl : PixproLiveViewControl
private lateinit var cachePositionProvider : ICachePositionProvider
private lateinit var focusControl: FocusControl
- private lateinit var captureControl: SingleShotControl
+ private lateinit var stillControl: SingleShotControl
+ private lateinit var movieControl: MovieShotControl
+
private var cameraPositionId = 0
{
Log.v(TAG, "injectDisplay()")
focusControl = FocusControl(commandCommunicator, frameDisplayer)
- captureControl = SingleShotControl(commandCommunicator, frameDisplayer)
+ stillControl = SingleShotControl(commandCommunicator, frameDisplayer)
+ movieControl = MovieShotControl(commandCommunicator, frameDisplayer)
}
override fun setNeighborCameraControl(camera0: ICameraControl?, camera1: ICameraControl?, camera2: ICameraControl?, camera3: ICameraControl?) { }
vibrator.vibrate(IVibrator.VibratePattern.SIMPLE_SHORT)
return
}
- if (::captureControl.isInitialized)
+ when (statusChecker.getStatus(ICameraStatus.TAKE_MODE))
{
- captureControl.doCapture(0)
+ "Video" -> {
+ if (::movieControl.isInitialized)
+ {
+ movieControl.doCapture(0)
+ vibrator.vibrate(IVibrator.VibratePattern.SIMPLE_SHORT)
+ }
+ }
+ else -> {
+ if (::stillControl.isInitialized)
+ {
+ stillControl.doCapture(0)
+ }
+ }
}
}
catch (e : Exception)
try
{
Log.v(TAG, " doShutterOff()")
- if (::captureControl.isInitialized)
+ when (statusChecker.getStatus(ICameraStatus.TAKE_MODE))
{
- captureControl.doCapture(0)
+ "Video" -> {
+ if (::movieControl.isInitialized)
+ {
+ movieControl.doCapture(-1)
+ vibrator.vibrate(IVibrator.VibratePattern.SIMPLE_MIDDLE)
+ }
+ }
+ else -> {
+ if (::stillControl.isInitialized)
+ {
+ stillControl.doCapture(-1)
+ }
+ }
}
}
catch (e : Exception)
--- /dev/null
+package jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.operation
+
+import android.util.Log
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICaptureControl
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.IPixproCommandPublisher
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.IPixproCommandCallback
+import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.specific.PixproExecuteVideo
+import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
+
+class MovieShotControl(private val commandPublisher: IPixproCommandPublisher, frameDisplayer: IAutoFocusFrameDisplay?) : ICaptureControl, IPixproCommandCallback
+{
+ private var isMovieRecording = false
+
+ override fun doCapture(kind: Int)
+ {
+ try
+ {
+ // シャッター
+ Log.v(TAG, " doCapture($kind) : $isMovieRecording ")
+
+ isMovieRecording = if ((kind <= -1)||(isMovieRecording))
+ {
+ // ビデオ録画終了
+ Log.v(TAG, " FINISH VIDEO")
+ commandPublisher.enqueueCommand(PixproExecuteVideo(this, true))
+ false
+ }
+ else
+ {
+ // ビデオ録画開始
+ Log.v(TAG, " START VIDEO")
+ commandPublisher.enqueueCommand(PixproExecuteVideo(this, false))
+ true
+ }
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun receivedMessage(id: Int, rx_body: ByteArray?)
+ {
+ Log.v(TAG, " MovieShotControl::receivedMessage() : ${rx_body?.size} bytes")
+/*
+ try
+ {
+ if ((rx_body != null)&&(rx_body.size > 10))
+ {
+ val highByte = rx_body[9]
+ val lowByte = rx_body[8]
+ if ((highByte == 0x20.toByte())&&(lowByte == 0x01.toByte()))
+ {
+ Log.v(TAG, String.format(" OK REPLY (ID : %d) ", id))
+ }
+ else
+ {
+ Log.v(TAG, String.format(" RECEIVED NG REPLY ID : %d, RESPONSE CODE : 0x%02x%02x ", id, highByte, lowByte))
+ }
+ }
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+*/
+ }
+
+ companion object
+ {
+ private val TAG = MovieShotControl::class.java.simpleName
+ }
+}
try
{
// シャッター
- Log.v(TAG, " doCapture() ")
+ Log.v(TAG, " doCapture() : $kind")
// シャッターを切る
commandPublisher.enqueueCommand(PixproExecuteShutter(this))
override fun receivedMessage(id: Int, rx_body: ByteArray?)
{
- Log.v(TAG, " KodakCaptureControl::receivedMessage() : ")
+ Log.v(TAG, " SingleShotControl::receivedMessage() : ")
/*
try
{
const val SEQ_SHUTTER = 10
const val SEQ_FOCUS = 11
const val SEQ_ZOOM = 12
+ const val SEQ_VIDEO = 13
const val SEQ_FLASH_OFF = 20
const val SEQ_FLASH_ON = 21
import jp.osdn.gokigen.gokigenassets.camera.vendor.pixpro.wrapper.command.messages.IPixproCommandCallback
-class PixproCommandReceiveOnly(private val id: Int, private val callback: IPixproCommandCallback) : PixproCommandBase()
+class PixproCommandReceiveOnly(private val id: Int, private val callback: IPixproCommandCallback, private val isDumpLog:Boolean = false) : PixproCommandBase()
{
override fun responseCallback(): IPixproCommandCallback
{
override fun dumpLog(): Boolean
{
- return false
+ return (isDumpLog)
}
}
private val data0: Byte = modeValue0.toByte()
private val data1: Byte = modeValue1.toByte()
-
override fun getId() : Int
{
return (IPixproMessages.SEQ_CHANGE_MODE)
}
- override fun commandBody(): ByteArray {
+ override fun commandBody(): ByteArray
+ {
return byteArrayOf(
0x2e.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
0x20.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
0x03.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
0xff.toByte(), 0xff.toByte(), 0xff.toByte(), 0xff.toByte(),
+ 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
+
+
+ 0x2e.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0xf1.toByte(), 0x03.toByte(), 0x00.toByte(), 0x00.toByte(), 0x01.toByte(), 0x00.toByte(), 0x00.toByte(), 0x80.toByte(),
+ 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x01.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
+ 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
+ 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
+
+ 0xff.toByte(), 0xff.toByte(), 0xff.toByte(), 0xff.toByte(),
0x00.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte()
)
}
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.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 PixproExecuteVideo(private val callback: IPixproCommandCallback, isStop: Boolean = false) : PixproCommandBase()
+class PixproExecuteVideo(private val callback: IPixproCommandCallback, isStop: Boolean = false, private val isDumpLog: Boolean = false) : PixproCommandBase()
{
private val data0: Byte = if (isStop) 0x03.toByte() else 0x02.toByte()
-
override fun getId() : Int
{
- return (IPixproMessages.SEQ_SHUTTER)
+ return (IPixproMessages.SEQ_VIDEO)
+ }
+
+ override fun dumpLog(): Boolean
+ {
+ return (isDumpLog)
}
override fun commandBody(): ByteArray
{
- return byteArrayOf( // (byte) 0xf9, (byte) 0x03
+ return byteArrayOf(
+
+ // (byte) 0xf9, (byte) 0x03
0x2e.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
- 0x80.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
+ 0x08.toByte(), 0x00.toByte(), 0x00.toByte(), 0x00.toByte(),
0xf0.toByte(), 0x03.toByte(), 0x00.toByte(), 0x00.toByte(),
0x01.toByte(), 0x00.toByte(), 0x00.toByte(), 0x80.toByte(),
companion object
{
private val TAG = PixproStatusChecker::class.java.simpleName
- private const val EVENT_POLL_QUEUE_MS = 350
+ private const val EVENT_POLL_QUEUE_MS = 550 // 550ms
private const val isDumpLog = false
}
0x2f.toByte() -> "20s"
0x30.toByte() -> "25s"
0x31.toByte() -> "30s"
-
+ 0x00.toByte() -> ""
else -> "($sv)"
}
statusHolder.updateValue(ICameraStatus.SHUTTER_SPEED, shutterSpeed)
fun getAvailableTakeMode(): List<String?>
{
- return (listOf("P", "M", "ASCN"))
- //return (listOf("P", "M", "ASCN", "Video", "Cont. Shot"))
+ //return (listOf("P", "M", "ASCN"))
+ return (listOf("P", "M", "ASCN", "Video", "Cont. Shot"))
}
fun getAvailableShutterSpeed(): List<String?>