Name: libmm-camcorder
Summary: Camera and recorder library
-Version: 0.10.232
+Version: 0.10.233
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
#define MMCAM_CAMERA_FOCUS_MODE "camera-focus-mode"
/**
+ * Focus level
+ */
+#define MMCAM_CAMERA_FOCUS_LEVEL "camera-focus-level"
+
+/**
* AF Scan range
* @see MMCamcorderAutoFocusType
*/
/* external storage state management */
int mm_camcorder_manage_external_storage_state(MMHandleType camcorder, int storage_state);
+/* get focus level */
+int mm_camcorder_get_focus_level(MMHandleType camcorder, int *level);
+
/* get log level */
int mm_camcorder_get_log_level(void);
MM_CAM_VIDEOSRC_ELEMENT_NAME,
MM_CAM_AUDIOSRC_ELEMENT_NAME,
MM_CAM_EXTRA_PREVIEW_ENABLE,
+ MM_CAM_CAMERA_FOCUS_LEVEL, /* 140 */
MM_CAM_ATTRIBUTE_NUM
} MMCamcorderAttrsID;
bool _mmcamcorder_commit_camera_pan(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
bool _mmcamcorder_commit_camera_tilt(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
bool _mmcamcorder_commit_camera_focus_mode(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
+bool _mmcamcorder_commit_camera_focus_level(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
bool _mmcamcorder_commit_camera_af_scan_range(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
bool _mmcamcorder_commit_camera_af_touch_area(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
bool _mmcamcorder_commit_camera_capture_mode(MMHandleType handle, int attr_idx, const MMAttrsValue *value);
/* external storage state management */
int _mmcamcorder_manage_external_storage_state(MMHandleType handle, int storage_state);
+/* get focus level */
+int _mmcamcorder_get_focus_level(MMHandleType handle, int *level);
+
#ifdef __cplusplus
}
#endif
#define _MMCAMCORDER_SENSOR_ENUM_NONE -255
/* camera information related */
-#define CAMINFO_CONVERT_NUM 46
+#define CAMINFO_CONVERT_NUM 47
/*=======================================================================================
return _mmcamcorder_manage_external_storage_state(camcorder, storage_state);
}
+int mm_camcorder_get_focus_level(MMHandleType camcorder, int *level)
+{
+ mmf_return_val_if_fail((void *)camcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ return _mmcamcorder_get_focus_level(camcorder, level);
+}
+
int mm_camcorder_get_log_level(void)
{
return _mmcamcorder_get_log_level();
{.int_min = 0},
{.int_max = 1},
_mmcamcorder_commit_extra_preview,
+ },
+ {
+ MM_CAM_CAMERA_FOCUS_LEVEL,
+ "camera-focus-level",
+ MM_ATTRS_TYPE_INT,
+ MM_ATTRS_FLAG_RW,
+ {(void*)0},
+ MM_ATTRS_VALID_TYPE_INT_RANGE,
+ {.int_min = 0},
+ {.int_max = -1},
+ _mmcamcorder_commit_camera_focus_level,
}
};
}
+bool _mmcamcorder_commit_camera_focus_level(MMHandleType handle, int attr_idx, const MMAttrsValue *value)
+{
+ int current_state = MM_CAMCORDER_STATE_NONE;
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+ _MMCamcorderSubContext *sc = NULL;
+ GstCameraControl *control = NULL;
+
+ mmf_return_val_if_fail(hcamcorder && value, FALSE);
+
+ sc = MMF_CAMCORDER_SUBCONTEXT(handle);
+ if (!sc)
+ return TRUE;
+
+ MMCAM_LOG_INFO("Focus level[%d]", value->value.i_val);
+
+ current_state = _mmcamcorder_get_state(handle);
+ if (current_state < MM_CAMCORDER_STATE_READY) {
+ MMCAM_LOG_INFO("Focus level will be set later.(state=%d)", current_state);
+ return TRUE;
+ } else if (current_state == MM_CAMCORDER_STATE_CAPTURING) {
+ MMCAM_LOG_ERROR("Can not set while CAPTURING");
+ hcamcorder->error_code = MM_ERROR_CAMCORDER_INVALID_STATE;
+ return FALSE;
+ }
+
+ if (!GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
+ MMCAM_LOG_ERROR("Can't cast Video source into camera control.");
+ return FALSE;
+ }
+
+ control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
+ if (control == NULL) {
+ MMCAM_LOG_ERROR("cast CAMERA_CONTROL failed");
+ return FALSE;
+ }
+
+ if (!gst_camera_control_set_focus_level(control, value->value.i_val)) {
+ MMCAM_LOG_ERROR("set focus level[%d[ failed", value->value.i_val);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
bool _mmcamcorder_commit_camera_af_scan_range(MMHandleType handle, int attr_idx, const MMAttrsValue *value)
{
mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "extra-preview", value->value.i_val);
+ MMCAM_LOG_INFO("done");
+
return TRUE;
}
{ "DigitalZoom", CONFIGURE_VALUE_INT_RANGE, {NULL} },
{ "OpticalZoom", CONFIGURE_VALUE_INT_RANGE, {NULL} },
{ "FocusMode", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
+ { "FocusLevel", CONFIGURE_VALUE_INT_RANGE, {NULL} },
{ "AFType", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
{ "AEType", CONFIGURE_VALUE_INT_ARRAY, {NULL} },
{ "ExposureValue", CONFIGURE_VALUE_INT_RANGE, {NULL} },
}
}
+int _mmcamcorder_get_focus_level(MMHandleType handle, int *level)
+{
+ GstCameraControl *control = NULL;
+ _MMCamcorderSubContext *sc = NULL;
+ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+
+ mmf_return_val_if_fail(hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+ mmf_return_val_if_fail(level, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
+
+ sc = MMF_CAMCORDER_SUBCONTEXT(hcamcorder);
+ mmf_return_val_if_fail(sc, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ if (!GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
+ MMCAM_LOG_ERROR("Can't cast Video source into camera control.");
+ return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
+ }
+
+ control = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
+ if (!control) {
+ MMCAM_LOG_ERROR("cast CAMERA_CONTROL failed");
+ return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
+ }
+
+ if (!gst_camera_control_get_focus_level(control, level)) {
+ MMCAM_LOG_ERROR("get focus level failed");
+ return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
+ }
+
+ MMCAM_LOG_INFO("focus level[%d]", *level);
+
+ return MM_ERROR_NONE;
+}
+
/*-----------------------------------------------
| CAMCORDER INTERNAL LOCAL |
"StrobeBrightness",
MM_CAMCONVERT_TYPE_INT_RANGE,
NULL,
+ },
+ {
+ CONFIGURE_TYPE_CTRL,
+ CONFIGURE_CATEGORY_CTRL_PHOTOGRAPH,
+ MM_CAM_CAMERA_FOCUS_LEVEL,
+ MM_CAMCORDER_ATTR_NONE,
+ "FocusLevel",
+ MM_CAMCONVERT_TYPE_INT_RANGE,
+ NULL,
}
};
if (_mmcamcorder_check_supported_attribute(handle, MM_CAM_CAMERA_FOCUS_MODE)) {
mm_attrs_set_modified(attrs, MM_CAM_CAMERA_FOCUS_MODE);
mm_attrs_commit(attrs, MM_CAM_CAMERA_FOCUS_MODE);
+
+ if (focus_mode == MM_CAMCORDER_FOCUS_MODE_MANUAL) {
+ mm_attrs_set_modified(attrs, MM_CAM_CAMERA_FOCUS_LEVEL);
+ mm_attrs_commit(attrs, MM_CAM_CAMERA_FOCUS_LEVEL);
+ }
} else {
MMCAM_LOG_INFO("focus mode is not supported");
}