ISO
authorPaul Kocialkowski <contact@paulk.fr>
Sat, 2 Feb 2013 22:57:52 +0000 (23:57 +0100)
committerPaul Kocialkowski <contact@paulk.fr>
Sat, 2 Feb 2013 22:57:52 +0000 (23:57 +0100)
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
exynos_camera.c
exynos_camera.h

index 99b0b4b..a271e75 100644 (file)
@@ -108,6 +108,9 @@ struct exynos_camera_preset exynos_camera_presets_galaxys2[] = {
 
                        .effect = "none",
                        .effect_values = "none,mono,negative,sepia,aqua",
+
+                       .iso = "auto",
+                       .iso_values = "auto,ISO50,ISO100,ISO200,ISO400,ISO800",
                },
        },
        {
@@ -169,6 +172,9 @@ struct exynos_camera_preset exynos_camera_presets_galaxys2[] = {
 
                        .effect = NULL,
                        .effect_values = NULL,
+
+                       .iso = "auto",
+                       .iso_values = "auto",
                },
        },
 };
@@ -429,6 +435,12 @@ int exynos_camera_params_init(struct exynos_camera *exynos_camera, int id)
        exynos_param_string_set(exynos_camera, "effect-values",
                exynos_camera->config->presets[id].params.effect_values);
 
+       // ISO
+       exynos_param_string_set(exynos_camera, "iso",
+               exynos_camera->config->presets[id].params.iso);
+       exynos_param_string_set(exynos_camera, "iso-values",
+               exynos_camera->config->presets[id].params.iso_values);
+
        // Camera
        exynos_param_float_set(exynos_camera, "focal-length",
                exynos_camera->config->presets[id].focal_length);
@@ -504,6 +516,9 @@ int exynos_camera_params_apply(struct exynos_camera *exynos_camera)
        char *effect_string;
        int effect;
 
+       char *iso_string;
+       int iso;
+
        char *metering_string;
        int metering;
 
@@ -892,6 +907,32 @@ int exynos_camera_params_apply(struct exynos_camera *exynos_camera)
                }
        }
 
+       // ISO
+       iso_string = exynos_param_string_get(exynos_camera, "iso");
+       if (iso_string != NULL) {
+               if (strcmp(iso_string, "auto") == 0)
+                       iso = ISO_AUTO;
+               else if (strcmp(iso_string, "ISO50") == 0)
+                       iso = ISO_50;
+               else if (strcmp(iso_string, "ISO100") == 0)
+                       iso = ISO_100;
+               else if (strcmp(iso_string, "ISO200") == 0)
+                       iso = ISO_200;
+               else if (strcmp(iso_string, "ISO400") == 0)
+                       iso = ISO_400;
+               else if (strcmp(iso_string, "ISO800") == 0)
+                       iso = ISO_800;
+               else
+                       iso = ISO_AUTO;
+
+               if (iso != exynos_camera->iso || force) {
+                       exynos_camera->iso = iso;
+                       rc = exynos_v4l2_s_ctrl(exynos_camera, 0, V4L2_CID_CAMERA_ISO, iso);
+                       if (rc < 0)
+                               LOGE("%s: s ctrl failed!", __func__);
+               }
+       }
+
        // Metering
        metering_string = exynos_param_string_get(exynos_camera, "metering");
        if (metering_string != NULL) {
index f7bfc5f..babe10b 100644 (file)
@@ -122,6 +122,9 @@ struct exynos_camera_params {
 
        char *effect;
        char *effect_values;
+
+       char *iso;
+       char *iso_values;
 };
 
 struct exynos_camera_preset {
@@ -243,6 +246,7 @@ struct exynos_camera {
        int whitebalance;
        int scene_mode;
        int effect;
+       int iso;
        int metering;
 };