OSDN Git Service

OPCで現在のカメラ設定値を表示できるようにする。ライブビューをVGA基準にする。
authorMRSa <mrsa@myad.jp>
Mon, 13 Aug 2018 15:29:03 +0000 (00:29 +0900)
committerMRSa <mrsa@myad.jp>
Mon, 13 Aug 2018 15:29:03 +0000 (00:29 +0900)
app/src/main/java/net/osdn/gokigen/gr2control/camera/olympus/wrapper/OlyCameraStatusWrapper.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/olympus/wrapper/property/CameraPropertyUtilities.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/ICameraStatusUpdateNotify.java
app/src/main/java/net/osdn/gokigen/gr2control/liveview/LiveViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/preference/IPreferencePropertyAccessor.java

index 168e8ed..a2ac990 100644 (file)
@@ -1,6 +1,7 @@
 package net.osdn.gokigen.gr2control.camera.olympus.wrapper;
 
 import android.support.annotation.NonNull;
+import android.util.Log;
 
 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
 import net.osdn.gokigen.gr2control.camera.ICameraStatusWatcher;
@@ -10,12 +11,40 @@ import java.util.ArrayList;
 import java.util.List;
 
 import jp.co.olympus.camerakit.OLYCamera;
+import jp.co.olympus.camerakit.OLYCameraPropertyListener;
+import jp.co.olympus.camerakit.OLYCameraStatusListener;
 
-public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatcher
+public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatcher, OLYCameraStatusListener, OLYCameraPropertyListener
 {
+    private final String TAG = toString();
     private final OLYCamera camera;
     private ICameraStatusUpdateNotify updateReceiver = null;
 
+    private static final String CAMERA_STATUS_APERTURE_VALUE = "ActualApertureValue";
+    private static final String CAMERA_STATUS_SHUTTER_SPEED = "ActualShutterSpeed";
+    private static final String CAMERA_STATUS_EXPOSURE_COMPENSATION = "ActualExposureCompensation";
+    private static final String CAMERA_STATUS_ISO_SENSITIVITY = "ActualIsoSensitivity";
+    private static final String CAMERA_STATUS_RECORDABLEIMAGES = "RemainingRecordableImages";
+    private static final String CAMERA_STATUS_MEDIA_BUSY = "MediaBusy";
+    private static final String CAMERA_STATUS_MEDIA_ERROR = "MediaError";
+    private static final String CAMERA_STATUS_ACTUAL_ISO_SENSITIITY_WARNING = "ActualIsoSensitivityWarning";
+    private static final String CAMERA_STATUS_EXPOSURE_WARNING = "ExposureWarning";
+    private static final String CAMERA_STATUS_EXPOSURE_METERING_WARNING = "ExposureMeteringWarning";
+    private static final String CAMERA_STATUS_HIGH_TEMPERATURE_WARNING = "HighTemperatureWarning";
+/*
+    private static final String CAMERA_STATUS_DETECT_FACES = "DetectedHumanFaces";
+    private static final String CAMERA_STATUS_FOCAL_LENGTH = "ActualFocalLength";
+    private static final String CAMERA_STATUS_LEVEL_GAUGE = "LevelGauge";
+*/
+
+    private String currentTakeMode = "";
+    private String currentMeteringMode = "";
+    private String currentWBMode = "";
+    private String currentRemainBattery = "";
+    private String currentShutterSpeed = "";
+    private String currentAperture = "";
+    private String currentExposureCompensation = "";
+
     OlyCameraStatusWrapper(OLYCamera camera)
     {
         this.camera = camera;
@@ -71,7 +100,7 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
         this.updateReceiver = notifier;
         try
         {
-
+            camera.setCameraStatusListener(this);
         }
         catch (Exception e)
         {
@@ -85,4 +114,143 @@ public class OlyCameraStatusWrapper implements ICameraStatus, ICameraStatusWatch
         this.updateReceiver = null;
 
     }
+
+    @Override
+    public void onUpdateStatus(OLYCamera olyCamera, String name)
+    {
+        try
+        {
+            if ((name == null)||(updateReceiver == null))
+            {
+                return;
+            }
+            String value;
+            switch (name)
+            {
+                case CAMERA_STATUS_APERTURE_VALUE:
+                    value = camera.getActualApertureValue();
+                    updateReceiver.updatedAperture(camera.getCameraPropertyValueTitle(value));
+                    break;
+                case CAMERA_STATUS_SHUTTER_SPEED:
+                    value = camera.getActualShutterSpeed();
+                    updateReceiver.updatedShutterSpeed(camera.getCameraPropertyValueTitle(value));
+                    break;
+                case CAMERA_STATUS_EXPOSURE_COMPENSATION:
+                    value = camera.getActualExposureCompensation();
+                    updateReceiver.updatedExposureCompensation(camera.getCameraPropertyValueTitle(value));
+                    break;
+                case CAMERA_STATUS_ISO_SENSITIVITY:
+                    value = camera.getActualIsoSensitivity();
+                    updateReceiver.updateIsoSensitivity(camera.getCameraPropertyValueTitle(value));
+                    break;
+                case CAMERA_STATUS_EXPOSURE_WARNING:
+                case CAMERA_STATUS_EXPOSURE_METERING_WARNING:
+                case CAMERA_STATUS_ACTUAL_ISO_SENSITIITY_WARNING:
+                case CAMERA_STATUS_HIGH_TEMPERATURE_WARNING:
+                    updateReceiver.updateWarning(name);
+                    break;
+                case CAMERA_STATUS_RECORDABLEIMAGES:
+                case CAMERA_STATUS_MEDIA_BUSY:
+                case CAMERA_STATUS_MEDIA_ERROR:
+                    updateReceiver.updateStorageStatus(name);
+                    break;
+                default:
+                    checkUpdateStatus(olyCamera);
+                    break;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    private void checkUpdateStatus(OLYCamera olyCamera)
+    {
+        String takeMode = getPropertyTitle(olyCamera, "TAKEMODE");
+        if (!takeMode.equals(currentTakeMode))
+        {
+            currentTakeMode = takeMode;
+            updateReceiver.updatedTakeMode(currentTakeMode);
+        }
+        String meteringMode = getPropertyTitle(olyCamera, "AE");
+        if (!meteringMode.equals(currentMeteringMode))
+        {
+            currentMeteringMode = meteringMode;
+            updateReceiver.updatedMeteringMode(currentMeteringMode);
+        }
+        String wbMode = getPropertyTitle(olyCamera, "WB");
+        if (!wbMode.equals(currentWBMode))
+        {
+            currentWBMode = wbMode;
+            updateReceiver.updatedWBMode(currentWBMode);
+        }
+        String remainBattery = getPropertyTitle(olyCamera, "BATTERY_LEVEL");
+        if (!remainBattery.equals(currentRemainBattery))
+        {
+            currentRemainBattery = remainBattery;
+            int percentage = 0;
+
+            Log.v(TAG, "currentRemainBattery : " + currentRemainBattery);
+/*
+            UNKNOWN    未検出
+            CHARGE     充電中
+            EMPTY      電池残量0
+            WARNING    電池残量小
+            LOW        電池残量中間
+            FULL       電池残量フル
+            EMPTY_AC   電池残量0/給電
+            SUPPLY_WARNING     電池残量小/給電
+            SUPPLY_LOW 電池残量中間/給電
+            SUPPLY_FULL        電池残量フル/給電
+ */
+            updateReceiver.updateRemainBattery(percentage);
+        }
+        String shutterSpeed = getPropertyTitle(olyCamera, "SHUTTER");
+        if (!shutterSpeed.equals(currentShutterSpeed))
+        {
+            currentShutterSpeed = shutterSpeed;
+            updateReceiver.updatedShutterSpeed(currentShutterSpeed);
+        }
+        String aperture = getPropertyTitle(olyCamera, "APERTURE");
+        if (!aperture.equals(currentAperture))
+        {
+            currentAperture = aperture;
+            updateReceiver.updatedAperture(currentAperture);
+        }
+        String exposureCompensation = getPropertyTitle(olyCamera, "EXPREV");
+        if (!exposureCompensation.equals(currentExposureCompensation))
+        {
+            currentExposureCompensation = exposureCompensation;
+            updateReceiver.updatedExposureCompensation(currentExposureCompensation);
+        }
+    }
+
+    private String getPropertyTitle(OLYCamera olyCamera, String propertyName)
+    {
+        String value = "";
+        try
+        {
+            value = olyCamera.getCameraPropertyValueTitle(olyCamera.getCameraPropertyValue(propertyName));
+            Log.v(TAG, "getPropertyTitle : " + value);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (value);
+    }
+
+    @Override
+    public void onUpdateCameraProperty(OLYCamera olyCamera, String name)
+    {
+        try
+        {
+            checkUpdateStatus(olyCamera);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
 }
index 38ae1b7..657e1dd 100644 (file)
@@ -18,7 +18,7 @@ public class CameraPropertyUtilities
     {
         if (quality == null)
         {
-            return OLYCamera.LiveViewSize.QVGA;
+            return OLYCamera.LiveViewSize.VGA;
         }
         if (quality.equalsIgnoreCase("QVGA"))
         {
@@ -37,7 +37,7 @@ public class CameraPropertyUtilities
         {
             return OLYCamera.LiveViewSize.QUAD_VGA;
         }
-        return OLYCamera.LiveViewSize.QVGA;
+        return OLYCamera.LiveViewSize.VGA;
     }
 
     public static String getPropertyValue(String value)
index 4e13ae1..c676626 100644 (file)
@@ -13,4 +13,8 @@ public interface ICameraStatusUpdateNotify
     void updatedMeteringMode(String meteringMode);
     void updatedWBMode(String wbMode);
     void updateRemainBattery(int percentage);
+
+    void updateIsoSensitivity(String sv);
+    void updateWarning(String warning);
+    void updateStorageStatus(String status);
 }
index b3ba8b9..739c797 100644 (file)
@@ -925,4 +925,22 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer, IFo
             e.printStackTrace();
         }
     }
+
+    @Override
+    public void updateIsoSensitivity(String sv)
+    {
+        Log.v(TAG, "updateIsoSensitivity : " + sv);
+    }
+
+    @Override
+    public void updateWarning(String warning)
+    {
+        Log.v(TAG, "updateWarning : " + warning);
+    }
+
+    @Override
+    public void updateStorageStatus(String status)
+    {
+        Log.v(TAG, "updateStorageStatus : " + status);
+    }
 }
index 95539e1..68826d1 100644 (file)
@@ -23,7 +23,7 @@ public interface IPreferencePropertyAccessor
     String RAW = "raw";
 
     String LIVE_VIEW_QUALITY = "live_view_quality";
-    String LIVE_VIEW_QUALITY_DEFAULT_VALUE = "QVGA";
+    String LIVE_VIEW_QUALITY_DEFAULT_VALUE = "VGA";
 
     String CAMERAKIT_VERSION = "camerakit_version";