• R/O
  • HTTP
  • SSH
  • HTTPS

A01d: Commit

OPC(Olympus Air)用望遠鏡アプリ。


Commit MetaInfo

Révision360a8f5e5e7b84af3dcbbf5bed7a018915de07e6 (tree)
l'heure2019-07-21 19:03:08
AuteurMRSa <mrsa@myad...>
CommiterMRSa

Message de Log

ズームとシャッターのコマンドを受け付けるようにした。

Change Summary

Modification

--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/IPanasonicInterfaceProvider.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/IPanasonicInterfaceProvider.java
@@ -23,8 +23,6 @@ public interface IPanasonicInterfaceProvider
2323 IZoomLensControl getZoomLensControl();
2424 ICaptureControl getCaptureControl();
2525 IDisplayInjector getDisplayInjector();
26- List<String> getApiCommands();
27- IPanasonicCameraApi getCameraApi();
2826
2927 IPanasonicCamera getPanasonicCamera();
3028 }
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/cameraproperty/PanasonicCameraApiListFragment.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/cameraproperty/PanasonicCameraApiListFragment.java
@@ -279,7 +279,7 @@ public class PanasonicCameraApiListFragment extends ListFragment implements Send
279279 @Override
280280 public void run()
281281 {
282- SendRequestDialog dialog = SendRequestDialog.newInstance(interfaceProvider.getPanasonicInterface().getCameraApi(), apiName, apiCallback);
282+ SendRequestDialog dialog = SendRequestDialog.newInstance(interfaceProvider.getPanasonicInterface().getPanasonicCamera(), apiName, apiCallback);
283283 FragmentManager manager = getFragmentManager();
284284 String tag = "dialog";
285285 if (manager != null)
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/cameraproperty/SendRequestDialog.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/cameraproperty/SendRequestDialog.java
@@ -15,7 +15,7 @@ import android.widget.Spinner;
1515 import android.widget.TextView;
1616
1717 import net.osdn.gokigen.a01d.R;
18-import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCameraApi;
18+import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCamera;
1919
2020 import androidx.annotation.NonNull;
2121 import androidx.annotation.Nullable;
@@ -29,9 +29,9 @@ import androidx.fragment.app.DialogFragment;
2929 public class SendRequestDialog extends DialogFragment
3030 {
3131 private final String TAG = toString();
32- private IPanasonicCameraApi cameraApi;
3332 private String method = "";
3433 private int selectedPosition = 0;
34+ private IPanasonicCamera camera = null;
3535 private SendRequestDialog.Callback callback = null;
3636 Dialog myDialog = null;
3737
@@ -39,10 +39,10 @@ public class SendRequestDialog extends DialogFragment
3939 *
4040 *
4141 */
42- public static SendRequestDialog newInstance(@NonNull IPanasonicCameraApi cameraApi, @NonNull String method, @Nullable SendRequestDialog.Callback callback)
42+ public static SendRequestDialog newInstance(@NonNull IPanasonicCamera camera, @NonNull String method, @Nullable SendRequestDialog.Callback callback)
4343 {
4444 SendRequestDialog instance = new SendRequestDialog();
45- instance.prepare(cameraApi, method, callback);
45+ instance.prepare(camera, method, callback);
4646
4747 // パラメータはBundleにまとめておく
4848 Bundle arguments = new Bundle();
@@ -57,9 +57,9 @@ public class SendRequestDialog extends DialogFragment
5757 *
5858 *
5959 */
60- private void prepare(@NonNull IPanasonicCameraApi cameraApi,@NonNull String method, @Nullable SendRequestDialog.Callback callback)
60+ private void prepare(@NonNull IPanasonicCamera camera,@NonNull String method, @Nullable SendRequestDialog.Callback callback)
6161 {
62- this.cameraApi = cameraApi;
62+ this.camera = camera;
6363 this.method = method;
6464 this.callback = callback;
6565 }
@@ -92,7 +92,7 @@ public class SendRequestDialog extends DialogFragment
9292 methodName.setText("");
9393 version.setText(activity.getString(R.string.dialog_version_hint));
9494 ArrayAdapter<String> adapter = new ArrayAdapter<>(activity, android.R.layout.simple_spinner_item);
95- adapter.addAll(cameraApi.getPanasonicApiServiceList());
95+ //adapter.addAll(cameraApi.getPanasonicApiServiceList());
9696
9797 int defaultSelection;
9898 for (defaultSelection = (adapter.getCount() - 1); defaultSelection >= 0; defaultSelection--)
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicCameraCaptureControl.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicCameraCaptureControl.java
@@ -3,7 +3,7 @@ package net.osdn.gokigen.a01d.camera.panasonic.operation;
33 import android.util.Log;
44
55 import net.osdn.gokigen.a01d.camera.ICaptureControl;
6-import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCameraApi;
6+import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCamera;
77 import net.osdn.gokigen.a01d.camera.panasonic.operation.takepicture.SingleShotControl;
88 import net.osdn.gokigen.a01d.liveview.IAutoFocusFrameDisplay;
99 import net.osdn.gokigen.a01d.liveview.IIndicatorControl;
@@ -20,9 +20,9 @@ public class PanasonicCameraCaptureControl implements ICaptureControl
2020 singleShotControl = new SingleShotControl(frameDisplayer, indicator);
2121 }
2222
23- public void setCameraApi(@NonNull IPanasonicCameraApi panasonicCameraApi)
23+ public void setCamera(@NonNull IPanasonicCamera panasonicCamera)
2424 {
25- singleShotControl.setCameraApi(panasonicCameraApi);
25+ singleShotControl.setCamera(panasonicCamera);
2626 }
2727
2828 /**
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicCameraZoomLensControl.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/PanasonicCameraZoomLensControl.java
@@ -3,26 +3,26 @@ package net.osdn.gokigen.a01d.camera.panasonic.operation;
33 import android.util.Log;
44
55 import net.osdn.gokigen.a01d.camera.IZoomLensControl;
6-import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCameraApi;
7-import net.osdn.gokigen.a01d.camera.sony.wrapper.ISonyCameraApi;
8-
9-import org.json.JSONObject;
6+import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCamera;
7+import net.osdn.gokigen.a01d.camera.utils.SimpleHttpClient;
108
119 import androidx.annotation.NonNull;
1210
1311 public class PanasonicCameraZoomLensControl implements IZoomLensControl
1412 {
1513 private final String TAG = toString();
16- private IPanasonicCameraApi cameraApi = null;
14+ private IPanasonicCamera camera = null;
15+ private boolean isZooming = false;
16+ private static final int TIMEOUT_MS = 3000;
1717
1818 public PanasonicCameraZoomLensControl()
1919 {
20- Log.v(TAG, "SonyCameraZoomLensControl()");
20+ Log.v(TAG, "PanasonicCameraZoomLensControl()");
2121 }
2222
23- public void setCameraApi(@NonNull IPanasonicCameraApi panasonicCameraApi)
23+ public void setCamera(@NonNull IPanasonicCamera panasonicCamera)
2424 {
25- cameraApi = panasonicCameraApi;
25+ camera = panasonicCamera;
2626 }
2727
2828 @Override
@@ -74,7 +74,7 @@ public class PanasonicCameraZoomLensControl implements IZoomLensControl
7474 public boolean isDrivingZoomLens()
7575 {
7676 Log.v(TAG, "isDrivingZoomLens()");
77- return (false);
77+ return (isZooming);
7878 }
7979
8080 /**
@@ -85,15 +85,23 @@ public class PanasonicCameraZoomLensControl implements IZoomLensControl
8585 public void driveZoomLens(boolean isZoomIn)
8686 {
8787 Log.v(TAG, "driveZoomLens() : " + isZoomIn);
88- if (cameraApi == null)
88+ if (camera == null)
8989 {
9090 Log.v(TAG, "IPanasonicCameraApi is null...");
9191 return;
9292 }
9393 try
9494 {
95- final String direction = (isZoomIn) ? "in" : "out";
96- final String movement = "1shot";
95+ String command;
96+ if (isZooming)
97+ {
98+ command = "cam.cgi?mode=camcmd&value=zoomstop";
99+ }
100+ else
101+ {
102+ command = (isZoomIn) ? "cam.cgi?mode=camcmd&value=tele-normal" : "cam.cgi?mode=camcmd&value=wide-normal";
103+ }
104+ final String direction = command;
97105 Thread thread = new Thread(new Runnable()
98106 {
99107 @Override
@@ -101,10 +109,14 @@ public class PanasonicCameraZoomLensControl implements IZoomLensControl
101109 {
102110 try
103111 {
104- JSONObject resultsObj = cameraApi.actZoom(direction, movement);
105- if (resultsObj == null)
112+ String reply = SimpleHttpClient.httpGet(camera.getCmdUrl() + direction, TIMEOUT_MS);
113+ if (reply.contains("ok"))
114+ {
115+ isZooming = !isZooming;
116+ }
117+ else
106118 {
107- Log.v(TAG, "driveZoomLens() reply is null.");
119+ Log.v(TAG, "driveZoomLens() reply is failure.");
108120 }
109121 }
110122 catch (Exception e)
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/takepicture/SingleShotControl.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/operation/takepicture/SingleShotControl.java
@@ -2,20 +2,20 @@ package net.osdn.gokigen.a01d.camera.panasonic.operation.takepicture;
22
33 import android.util.Log;
44
5-import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCameraApi;
5+import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCamera;
6+import net.osdn.gokigen.a01d.camera.utils.SimpleHttpClient;
67 import net.osdn.gokigen.a01d.liveview.IAutoFocusFrameDisplay;
78 import net.osdn.gokigen.a01d.liveview.IIndicatorControl;
89
9-import org.json.JSONObject;
10-
1110 import androidx.annotation.NonNull;
1211
1312 public class SingleShotControl
1413 {
1514 private static final String TAG = SingleShotControl.class.getSimpleName();
15+ private static final int TIMEOUT_MS = 3000;
1616 private final IAutoFocusFrameDisplay frameDisplayer;
1717 private final IIndicatorControl indicator;
18- private IPanasonicCameraApi cameraApi = null;
18+ private IPanasonicCamera camera = null;
1919
2020 /**
2121 *
@@ -31,9 +31,9 @@ public class SingleShotControl
3131 *
3232 *
3333 */
34- public void setCameraApi(@NonNull IPanasonicCameraApi panasonicCameraApi)
34+ public void setCamera(@NonNull IPanasonicCamera panasonicCamera)
3535 {
36- this.cameraApi = panasonicCameraApi;
36+ this.camera = panasonicCamera;
3737 }
3838
3939 /**
@@ -43,9 +43,9 @@ public class SingleShotControl
4343 public void singleShot()
4444 {
4545 Log.v(TAG, "singleShot()");
46- if (cameraApi == null)
46+ if (camera == null)
4747 {
48- Log.v(TAG, "ISonyCameraApi is null...");
48+ Log.v(TAG, "IPanasonicCamera is null...");
4949 return;
5050 }
5151 try
@@ -57,11 +57,10 @@ public class SingleShotControl
5757 {
5858 try
5959 {
60- //JSONObject resultsObj = cameraApi.awaitTakePicture();
61- JSONObject resultsObj = cameraApi.actTakePicture();
62- if (resultsObj == null)
60+ String reply = SimpleHttpClient.httpGet(camera.getCmdUrl() + "cam.cgi?mode=camcmd&value=capture", TIMEOUT_MS);
61+ if (!reply.contains("ok"))
6362 {
64- Log.v(TAG, "setTouchAFPosition() reply is null.");
63+ Log.v(TAG, "Capture Failure... : " + reply);
6564 }
6665 }
6766 catch (Exception e)
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/PanasonicCameraWrapper.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/PanasonicCameraWrapper.java
@@ -21,6 +21,7 @@ import net.osdn.gokigen.a01d.camera.panasonic.wrapper.connection.PanasonicCamera
2121 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.eventlistener.CameraEventObserver;
2222 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.eventlistener.ICameraEventObserver;
2323 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.eventlistener.ICameraStatusHolder;
24+import net.osdn.gokigen.a01d.camera.utils.SimpleHttpClient;
2425 import net.osdn.gokigen.a01d.liveview.IAutoFocusFrameDisplay;
2526 import net.osdn.gokigen.a01d.liveview.IIndicatorControl;
2627 import net.osdn.gokigen.a01d.liveview.liveviewlistener.ILiveViewListener;
@@ -36,6 +37,7 @@ public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasoni
3637 {
3738 private final String TAG = toString();
3839 private final Activity context;
40+ private static final int TIMEOUT_MS = 3000;
3941 private final ICameraStatusReceiver provider;
4042 private final ICameraChangeListener listener;
4143 private IPanasonicCamera panasonicCamera = null;
@@ -61,11 +63,11 @@ public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasoni
6163 {
6264 this.panasonicCameraApi = PanasonicCameraApi.newInstance(panasonicCamera);
6365 eventObserver = CameraEventObserver.newInstance(context, panasonicCameraApi);
64- liveViewControl = new PanasonicLiveViewControl(panasonicCameraApi);
66+ liveViewControl = new PanasonicLiveViewControl(panasonicCamera);
6567
6668 focusControl.setCameraApi(panasonicCameraApi);
67- captureControl.setCameraApi(panasonicCameraApi);
68- zoomControl.setCameraApi(panasonicCameraApi);
69+ captureControl.setCamera(panasonicCamera);
70+ zoomControl.setCamera(panasonicCamera);
6971 }
7072 catch (Exception e)
7173 {
@@ -76,22 +78,19 @@ public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasoni
7678 @Override
7779 public void startRecMode()
7880 {
79- try {
80- List<String> apiCommands = getApiCommands();
81- int index = apiCommands.indexOf("startRecMode");
82- if (index > 0)
81+ try
82+ {
83+ // 撮影モード(RecMode)に切り替え
84+ String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=recmode", TIMEOUT_MS);
85+ if (!reply.contains("ok"))
8386 {
84- // startRecMode発行
85- Log.v(TAG, "----- THIS CAMERA NEEDS COMMAND 'startRecMode'.");
86- panasonicCameraApi.startRecMode();
87+ Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE RECMODE.");
8788 }
8889 }
8990 catch (Exception e)
9091 {
9192 e.printStackTrace();
9293 }
93-
94-
9594 }
9695
9796 @Override
@@ -172,30 +171,6 @@ public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasoni
172171 }
173172
174173 @Override
175- public List<String> getApiCommands()
176- {
177- List<String> availableApis = new ArrayList<>();
178- try
179- {
180- String apiList = panasonicCameraApi.getAvailableApiList().getString("result");
181- apiList = apiList.replace("[","").replace("]", "").replace("\"","");
182- String[] apiListSplit = apiList.split(",");
183- availableApis = Arrays.asList(apiListSplit);
184- }
185- catch (Exception e)
186- {
187- e.printStackTrace();
188- }
189- return (availableApis);
190- }
191-
192- @Override
193- public IPanasonicCameraApi getCameraApi()
194- {
195- return (panasonicCameraApi);
196- }
197-
198- @Override
199174 public IPanasonicCamera getPanasonicCamera()
200175 {
201176 return (panasonicCamera);
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/PanasonicLiveViewControl.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/PanasonicLiveViewControl.java
@@ -1,30 +1,37 @@
11 package net.osdn.gokigen.a01d.camera.panasonic.wrapper;
22
3-
43 import android.util.Log;
54
65 import net.osdn.gokigen.a01d.camera.ILiveViewControl;
7-import net.osdn.gokigen.a01d.camera.utils.SimpleLiveviewSlicer;
6+import net.osdn.gokigen.a01d.camera.utils.SimpleHttpClient;
87 import net.osdn.gokigen.a01d.liveview.liveviewlistener.ILiveViewListener;
98 import net.osdn.gokigen.a01d.liveview.liveviewlistener.CameraLiveViewListenerImpl;
109
11-import org.json.JSONArray;
12-import org.json.JSONObject;
13-
1410 import androidx.annotation.NonNull;
1511
12+import java.net.DatagramPacket;
13+import java.net.DatagramSocket;
14+import java.util.Arrays;
15+
1616 public class PanasonicLiveViewControl implements ILiveViewControl
1717 {
1818 private final String TAG = toString();
19- private final IPanasonicCameraApi cameraApi;
19+ private final IPanasonicCamera camera;
2020 //private final BlockingQueue<byte[]> mJpegQueue = new ArrayBlockingQueue<>(2);
2121 private final CameraLiveViewListenerImpl liveViewListener;
22- private boolean whileFetching = false;
23- private static final int FETCH_ERROR_MAX = 30;
22+ private DatagramSocket receiveSocket = null;
23+ private boolean whileStreamReceive = false;
24+ private int errorOccur = 0;
25+ private static final int ERROR_MAX = 30;
26+ private static final int RECEIVE_BUFFER_SIZE = 1024 * 1024 * 4;
27+ private static final int TIMEOUT_MS = 3000;
28+ private static final int LIVEVIEW_PORT = 49152;
29+ private final String LIVEVIEW_START_REQUEST = "cam.cgi?mode=startstream&value=49152";
30+ private final String LIVEVIEW_STOP_REQUEST = "cam.cgi?mode=stopstream";
2431
25- PanasonicLiveViewControl(@NonNull IPanasonicCameraApi cameraApi)
32+ PanasonicLiveViewControl(@NonNull IPanasonicCamera camera)
2633 {
27- this.cameraApi = cameraApi;
34+ this.camera = camera;
2835 liveViewListener = new CameraLiveViewListenerImpl();
2936 }
3037
@@ -47,18 +54,32 @@ public class PanasonicLiveViewControl implements ILiveViewControl
4754 {
4855 try
4956 {
50- JSONObject replyJson;
51- replyJson = cameraApi.startLiveview();
52- if (!PanasonicCameraApi.isErrorReply(replyJson))
57+ startReceiveStream();
58+ if (!whileStreamReceive)
59+ {
60+ Log.v(TAG, "CANNOT OPEN : UDP RECEIVE SOCKET");
61+ return;
62+ }
63+ String requestUrl = camera.getCmdUrl() + LIVEVIEW_START_REQUEST;
64+ String reply = SimpleHttpClient.httpGet(requestUrl, TIMEOUT_MS);
65+ if (!reply.contains("<result>ok</result>"))
5366 {
5467 try
5568 {
56- JSONArray resultsObj = replyJson.getJSONArray("result");
57- if (1 <= resultsObj.length())
69+ // エラー回数のカウントアップ
70+ errorOccur++;
71+
72+ // 少し待つ...
73+ Thread.sleep(TIMEOUT_MS);
74+
75+ if (errorOccur < ERROR_MAX)
5876 {
59- // Obtain liveview URL from the result.
60- final String liveviewUrl = resultsObj.getString(0);
61- start(liveviewUrl);
77+ Log.v(TAG, "RETRY START LIVEVIEW... : " + errorOccur);
78+ startLiveView();
79+ }
80+ else
81+ {
82+ Log.v(TAG, "RETRY OVER : START LIVEVIEW");
6283 }
6384 }
6485 catch (Exception e)
@@ -66,6 +87,10 @@ public class PanasonicLiveViewControl implements ILiveViewControl
6687 e.printStackTrace();
6788 }
6889 }
90+ else
91+ {
92+ Log.v(TAG, " ----- START LIVEVIEW ----- : " + requestUrl);
93+ }
6994 }
7095 catch (Exception e)
7196 {
@@ -94,10 +119,16 @@ public class PanasonicLiveViewControl implements ILiveViewControl
94119 {
95120 try
96121 {
97- JSONObject resultsObj = cameraApi.stopLiveview();
98- if (resultsObj == null)
122+ String reply = SimpleHttpClient.httpGet(camera.getCmdUrl() + LIVEVIEW_STOP_REQUEST, TIMEOUT_MS);
123+ if (!reply.contains("<result>ok</result>"))
124+ {
125+ Log.v(TAG, "stopLiveview() reply is fail... ");
126+ }
127+ else
99128 {
100- Log.v(TAG, "stopLiveview() reply is null.");
129+ // ライブビューウォッチャーを止める
130+ whileStreamReceive = false;
131+ Log.v(TAG, "stopLiveview() is issued.");
101132 }
102133 }
103134 catch (Exception e)
@@ -138,100 +169,124 @@ public class PanasonicLiveViewControl implements ILiveViewControl
138169 return (1.0f);
139170 }
140171
141-
142-
143- public boolean start(final String streamUrl)
172+ private void startReceiveStream()
144173 {
145- if (streamUrl == null)
174+ if (whileStreamReceive)
146175 {
147- Log.e(TAG, "start() streamUrl is null.");
148- return (false);
176+ Log.v(TAG, "startReceiveStream() : already starting.");
177+ return;
149178 }
150- if (whileFetching)
179+
180+ // ソケットをあける (UDP)
181+ try
151182 {
152- Log.v(TAG, "start() already starting.");
183+ receiveSocket = new DatagramSocket(LIVEVIEW_PORT);
184+ whileStreamReceive = true;
185+ }
186+ catch (Exception e)
187+ {
188+ e.printStackTrace();
189+ whileStreamReceive = false;
190+ receiveSocket = null;
153191 }
154- whileFetching = true;
155192
156- // A thread for retrieving liveview data from server.
193+ // 受信スレッドを動かす
194+ Thread thread = new Thread(new Runnable() {
195+ @Override
196+ public void run() {
197+ receiverThread();
198+ }
199+ });
157200 try
158201 {
159- Thread thread = new Thread(new Runnable()
202+ thread.start();
203+ }
204+ catch (Exception e)
205+ {
206+ e.printStackTrace();
207+ }
208+ }
209+
210+ private void checkReceiveImage(@NonNull DatagramPacket packet)
211+ {
212+ int dataLength = packet.getLength();
213+ int searchIndex = 0;
214+ int startPosition = 0;
215+ int[] startmarker = { 0xff, 0xd8 };
216+ byte[] receivedData = packet.getData();
217+ if (receivedData == null)
218+ {
219+ // 受信データが取れなかったので終了する
220+ Log.v(TAG, "RECEIVED DATA IS NULL...");
221+ return;
222+ }
223+ //Log.v(TAG, "RECEIVED PACKET : " + dataLength);
224+ while (startPosition < dataLength)
225+ {
226+ // 先頭のjpegマーカーが出てくるまで読み飛ばす
227+ try
160228 {
161- @Override
162- public void run()
229+ if (receivedData[startPosition++] == (byte) startmarker[searchIndex])
163230 {
164- Log.d(TAG, "Starting retrieving streaming data from server.");
165- SimpleLiveviewSlicer slicer = null;
166- int continuousNullDataReceived = 0;
167- try
231+ searchIndex++;
232+ if (searchIndex >= startmarker.length)
168233 {
169- // Create Slicer to open the stream and parse it.
170- slicer = new SimpleLiveviewSlicer();
171- slicer.open(streamUrl);
172-
173- while (whileFetching)
174- {
175- final SimpleLiveviewSlicer.Payload payload = slicer.nextPayload();
176- if (payload == null)
177- {
178- //Log.v(TAG, "Liveview Payload is null.");
179- continuousNullDataReceived++;
180- if (continuousNullDataReceived > FETCH_ERROR_MAX)
181- {
182- Log.d(TAG, " FETCH ERROR MAX OVER ");
183- break;
184- }
185- continue;
186- }
187- //if (mJpegQueue.size() == 2)
188- //{
189- // mJpegQueue.remove();
190- //}
191- //mJpegQueue.add(payload.getJpegData());
192- liveViewListener.onUpdateLiveView(payload.getJpegData(), null);
193- continuousNullDataReceived = 0;
194- }
195- }
196- catch (Exception e)
197- {
198- e.printStackTrace();
199- }
200- finally
201- {
202- try
203- {
204- if (slicer != null)
205- {
206- slicer.close();
207- }
208- }
209- catch (Exception e)
210- {
211- e.printStackTrace();
212- }
213- //mJpegQueue.clear();
214- if ((!whileFetching)&&(continuousNullDataReceived > FETCH_ERROR_MAX))
215- {
216- // 再度ライブビューのスタートをやってみる。
217- whileFetching = false;
218- //continuousNullDataReceived = 0;
219- start(streamUrl);
220- }
234+ break;
221235 }
222236 }
223- });
224- thread.start();
237+ }
238+ catch (Exception e)
239+ {
240+ e.printStackTrace();
241+ return;
242+ }
243+ }
244+ int offset = startPosition - startmarker.length;
245+ liveViewListener.onUpdateLiveView(Arrays.copyOfRange(receivedData, offset, dataLength - offset), null);
246+ }
247+
248+ private void receiverThread()
249+ {
250+ byte[] buffer = new byte[RECEIVE_BUFFER_SIZE];
251+ while (whileStreamReceive)
252+ {
253+ try
254+ {
255+ DatagramPacket receive_packet = new DatagramPacket(buffer, buffer.length);
256+ if (receiveSocket != null)
257+ {
258+ receiveSocket.receive(receive_packet);
259+ checkReceiveImage(receive_packet);
260+ }
261+ else
262+ {
263+ Log.v(TAG, "receiveSocket is NULL...");
264+ }
265+ }
266+ catch (Exception e)
267+ {
268+ e.printStackTrace();
269+ }
270+ }
271+ try
272+ {
273+ if (receiveSocket != null)
274+ {
275+ receiveSocket.close();
276+ receiveSocket = null;
277+ }
225278 }
226279 catch (Exception e)
227280 {
228281 e.printStackTrace();
229282 }
230- return (true);
283+ Log.v(TAG, " ----- startReceiveStream() : Finished.");
284+ System.gc();
231285 }
232286
233287 public ILiveViewListener getLiveViewListener()
234288 {
235289 return (liveViewListener);
236290 }
291+
237292 }
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/connection/PanasonicCameraConnectSequence.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/connection/PanasonicCameraConnectSequence.java
@@ -9,7 +9,6 @@ import net.osdn.gokigen.a01d.camera.ICameraConnection;
99 import net.osdn.gokigen.a01d.camera.ICameraStatusReceiver;
1010 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCamera;
1111 import net.osdn.gokigen.a01d.camera.panasonic.wrapper.IPanasonicCameraHolder;
12-import net.osdn.gokigen.a01d.camera.utils.SimpleHttpClient;
1312
1413 import androidx.annotation.NonNull;
1514
@@ -123,6 +122,7 @@ public class PanasonicCameraConnectSequence implements Runnable, PanasonicSsdpCl
123122 }
124123 }
125124
125+/*
126126 private void waitForAMoment(long mills)
127127 {
128128 if (mills > 0)
@@ -135,11 +135,11 @@ public class PanasonicCameraConnectSequence implements Runnable, PanasonicSsdpCl
135135 }
136136 }
137137 }
138+*/
138139
139140 @Override
140141 public void onErrorFinished(String reason)
141142 {
142143 cameraConnection.alertConnectingFailed(reason);
143144 }
144-
145145 }
--- a/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/eventlistener/CameraEventObserver.java
+++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/panasonic/wrapper/eventlistener/CameraEventObserver.java
@@ -55,7 +55,7 @@ public class CameraEventObserver implements ICameraEventObserver
5555 return (false);
5656 }
5757
58- isEventMonitoring = true;
58+ isEventMonitoring = false;
5959 try
6060 {
6161 Thread thread = new Thread()
Afficher sur ancien navigateur de dépôt.