1 package net.osdn.gokigen.gr2control.camera.olympus.wrapper;
3 import android.app.Activity;
4 import android.content.SharedPreferences;
5 import android.graphics.PointF;
6 import android.util.Log;
8 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
9 import net.osdn.gokigen.gr2control.camera.ILiveViewControl;
10 import net.osdn.gokigen.gr2control.camera.olympus.wrapper.property.CameraPropertyUtilities;
11 import net.osdn.gokigen.gr2control.liveview.liveviewlistener.IImageDataReceiver;
12 import net.osdn.gokigen.gr2control.liveview.liveviewlistener.ILiveViewListener;
13 import net.osdn.gokigen.gr2control.preference.IPreferencePropertyAccessor;
17 import androidx.annotation.NonNull;
18 import androidx.preference.PreferenceManager;
19 import jp.co.olympus.camerakit.OLYCamera;
20 import jp.co.olympus.camerakit.OLYCameraLiveViewListener;
26 class OlyCameraWrapper implements ICameraRunMode, ILiveViewControl, ILiveViewListener, OLYCameraLiveViewListener
28 private final String TAG = toString();
29 private final Activity context;
30 private final OLYCamera camera;
31 private IImageDataReceiver dataReceiver = null;
37 OlyCameraWrapper(Activity context)
39 this.context = context;
40 camera = new OLYCamera();
41 camera.setContext(context.getApplicationContext());
48 OLYCamera getOLYCamera()
58 public void changeRunMode(boolean isRecording)
60 OLYCamera.RunMode runMode = (isRecording) ? OLYCamera.RunMode.Recording : OLYCamera.RunMode.Playback;
61 Log.v(TAG, "changeRunMode() : " + runMode);
64 camera.changeRunMode(runMode);
77 public boolean isRecordingMode()
79 boolean isRecordingMode = false;
82 OLYCamera.RunMode runMode = camera.getRunMode();
83 isRecordingMode = (runMode == OLYCamera.RunMode.Recording);
89 return (isRecordingMode);
94 * ILiveViewControl の実装
98 public void changeLiveViewSize(String size)
102 camera.changeLiveViewSize(CameraPropertyUtilities.toLiveViewSizeType(size));
115 public void startLiveView(boolean isCameraScreen)
117 Log.v(TAG, "startLiveView() : " + isCameraScreen);
120 camera.startLiveView();
133 public void stopLiveView()
137 camera.stopLiveView();
150 public void updateDigitalZoom()
154 float scale = getDigitalZoomScalePreference();
155 camera.changeDigitalZoomScale(scale);
156 Log.v(TAG, "DIGITAL ZOOM SCALE : " + scale);
169 public void updateMagnifyingLiveViewScale(boolean isChangeScale)
173 updateMagnifyingLiveViewScale(getMagnifyingLiveViewScale(isChangeScale));
187 public float getMagnifyingLiveViewScale()
189 return (getMagnifyingLiveViewScale(false));
197 public float getDigitalZoomScale()
199 return (getDigitalZoomScalePreference());
206 private void updateMagnifyingLiveViewScale(float scale)
212 if (camera.isMagnifyingLiveView())
214 camera.stopMagnifyingLiveView();
215 Log.v(TAG, "RESET LIVE VIEW SCALE : " + 1.0f);
219 OLYCamera.MagnifyingLiveViewScale setScale;
222 setScale = OLYCamera.MagnifyingLiveViewScale.X14;
224 else if (scale >= 10.0f)
226 setScale = OLYCamera.MagnifyingLiveViewScale.X10;
228 else if (scale >= 7.0f)
230 setScale = OLYCamera.MagnifyingLiveViewScale.X7;
232 else // if (scale >= 5.0f)
234 setScale = OLYCamera.MagnifyingLiveViewScale.X5;
236 changeMagnifyingLiveView(setScale);
237 Log.v(TAG, "SET LIVE VIEW SCALE : " + scale);
249 private void changeMagnifyingLiveView(OLYCamera.MagnifyingLiveViewScale setScale)
253 PointF centerPoint = new PointF(0.5f, 0.5f); // 中心座標
254 if (camera.isMagnifyingLiveView())
256 camera.changeMagnifyingLiveViewScale(setScale);
260 camera.startMagnifyingLiveViewAtPoint(centerPoint, setScale);
270 * ライブビュー拡大倍率の設定値を応答する
273 private float getMagnifyingLiveViewScale(boolean isChangeScale)
276 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
277 String value = preferences.getString(IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE, IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE_DEFAULT_VALUE);
280 scale = Float.parseFloat(value);
281 String changeValue = null;
289 else if (scale >= 10.0f)
292 changeValue = "14.0";
294 else if (scale >= 7.0f)
297 changeValue = "10.0";
299 else if (scale >= 5.0f)
304 else // if (scale < 5.0f)
310 if (changeValue != null)
312 SharedPreferences.Editor editor = preferences.edit();
313 editor.putString(IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE, changeValue);
329 private float getDigitalZoomScalePreference()
332 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
333 String value = preferences.getString(IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL, IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL_DEFAULT_VALUE);
336 Map<String, Float> range = camera.getDigitalZoomScaleRange();
337 float max = range.get(OLYCamera.DIGITAL_ZOOM_SCALE_RANGE_MAXIMUM_KEY);
338 float min = range.get(OLYCamera.DIGITAL_ZOOM_SCALE_RANGE_MINIMUM_KEY);
340 if (value.equals("MAX"))
346 scale = Float.parseFloat(value);
352 else if (scale > max)
370 public void setCameraLiveImageView(@NonNull IImageDataReceiver target)
374 dataReceiver = target;
377 camera.setLiveViewListener(this);
391 public void onUpdateLiveView(OLYCamera olyCamera, byte[] bytes, Map<String, Object> map)
395 if (dataReceiver != null)
397 dataReceiver.setImageData(bytes, map);