1 package jp.sfjp.gokigen.a01c.thetacamerawrapper.operation
3 import android.content.Context
4 import android.graphics.Color
5 import android.util.Log
6 import jp.sfjp.gokigen.a01c.ICameraController
7 import jp.sfjp.gokigen.a01c.IShowInformation
8 import jp.sfjp.gokigen.a01c.R
9 import jp.sfjp.gokigen.a01c.thetacamerawrapper.IThetaSessionIdProvider
10 import jp.sfjp.gokigen.a01c.utils.SimpleHttpClient
12 class ThetaBracketingControl(val context: Context, private val sessionIdProvider: IThetaSessionIdProvider, private val statusDrawer: IShowInformation, private val liveViewControl: ICameraController)
14 private val httpClient = SimpleHttpClient()
15 private var isCapturing = false
17 fun bracketingControl(useOSCv2 : Boolean)
23 startCapture(useOSCv2)
24 statusDrawer.setMessage(IShowInformation.AREA_9, Color.YELLOW, context.getString(R.string.capturing))
29 statusDrawer.setMessage(IShowInformation.AREA_9, Color.WHITE, "")
31 statusDrawer.invalidate()
32 isCapturing = !isCapturing
40 private fun startCapture(useOSCv2 : Boolean)
42 Log.v(TAG, "startCapture() (API v2.1 : $useOSCv2)")
48 val shootUrl = "http://192.168.1.1/osc/commands/execute"
49 // val postData = if (useOSCv2) "{\"name\":\"camera.startCapture\",\"parameters\":{\"timeout\":0, \"mode\":\"bracket\"}}" else "{\"name\":\"camera._startCapture\",\"parameters\":{\"sessionId\": \"" + sessionIdProvider.sessionId + "\", \"mode\":\"bracket\"}}"
50 // val postData = if (useOSCv2) "{\"name\":\"camera.startCapture\",\"parameters\":{\"timeout\":0, \"mode\":\"composite\"}}" else "{\"name\":\"camera._startCapture\",\"parameters\":{\"sessionId\": \"" + sessionIdProvider.sessionId + "\", \"mode\":\"composite\"}}"
51 val postData = if (useOSCv2) "{\"name\":\"camera.startCapture\",\"parameters\":{\"timeout\":0, \"mode\":\"interval\"}}" else "{\"name\":\"camera._startCapture\",\"parameters\":{\"sessionId\": \"" + sessionIdProvider.sessionId + "\", \"mode\":\"interval\"}}"
52 Log.v(TAG, " start Capture : $postData")
54 val result: String? = httpClient.httpPostWithHeader(shootUrl, postData, null, "application/json;charset=utf-8", timeoutMs)
55 if ((result != null)&&(result.isNotEmpty()))
57 Log.v(TAG, " startCapture() : $result")
61 liveViewControl.stopLiveView()
62 waitMs(300) // ちょっと待つ...
63 liveViewControl.startLiveView()
69 Log.v(TAG, "startCapture() reply is null. $postData")
85 private fun stopCapture(useOSCv2 : Boolean)
87 Log.v(TAG, "stopCapture() (API v2.1 : $useOSCv2)")
93 val shootUrl = "http://192.168.1.1/osc/commands/execute"
94 val postData = if (useOSCv2) "{\"name\":\"camera.stopCapture\",\"parameters\":{\"timeout\":0}}" else "{\"name\":\"camera._stopCapture\",\"parameters\":{\"sessionId\": \"" + sessionIdProvider.sessionId + "\"}}"
96 Log.v(TAG, " stop Capture : $postData")
98 val result: String? = httpClient.httpPostWithHeader(shootUrl, postData, null, "application/json;charset=utf-8", timeoutMs)
99 if ((result != null)&&(result.isNotEmpty()))
101 Log.v(TAG, " stopCapture() : $result")
105 // THETA V / THETA Z1 は、videoモードでライブビューができるので...
106 liveViewControl.stopLiveView()
107 waitMs() // ちょっと待つ...
108 liveViewControl.startLiveView()
113 Log.v(TAG, "stopCapture() reply is null. $postData")
133 private fun waitMs(waitMs: Int = 300)
137 Thread.sleep(waitMs.toLong())
147 private val TAG = ThetaBracketingControl::class.java.simpleName
148 private const val timeoutMs = 6000