From: Jeongmo Yang Date: Fri, 4 Aug 2023 06:26:02 +0000 (+0900) Subject: Add new function to get exposure from device X-Git-Tag: accepted/tizen/7.0/unified/20230808.014653^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5b05e2e31ac7a02b010418f87a28f2949e13bfde;p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git Add new function to get exposure from device [Version] 0.10.294 [Issue Type] New feature Change-Id: I367574551a8859f60178c55b43d5581e96c2a30b Signed-off-by: Jeongmo Yang --- diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index a4f9090..f0deab5 100755 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -1,6 +1,6 @@ Name: libmm-camcorder Summary: Camera and recorder library -Version: 0.10.293 +Version: 0.10.294 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_camcorder.h b/src/include/mm_camcorder.h index 0eecfc0..aaf8cf4 100644 --- a/src/include/mm_camcorder.h +++ b/src/include/mm_camcorder.h @@ -3519,6 +3519,9 @@ int mm_camcorder_get_extra_preview_bitrate(MMHandleType camcorder, int stream_id int mm_camcorder_set_extra_preview_gop_interval(MMHandleType camcorder, int stream_id, int interval); int mm_camcorder_get_extra_preview_gop_interval(MMHandleType camcorder, int stream_id, int *interval); +/* get exposure */ +int mm_camcorder_get_exposure(MMHandleType camcorder, int *exposure); + /** @} */ diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index b984024..111d0f0 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -1367,6 +1367,9 @@ int _mmcamcorder_manage_external_storage_state(MMHandleType handle, int storage_ /* get focus level */ int _mmcamcorder_get_focus_level(MMHandleType handle, int *level); +/* get exposure */ +int _mmcamcorder_get_exposure(MMHandleType handle, int *exposure); + #ifdef __cplusplus } #endif diff --git a/src/mm_camcorder.c b/src/mm_camcorder.c index a4c046a..b949012 100644 --- a/src/mm_camcorder.c +++ b/src/mm_camcorder.c @@ -470,6 +470,13 @@ int mm_camcorder_manage_external_storage_state(MMHandleType camcorder, int stora return _mmcamcorder_manage_external_storage_state(camcorder, storage_state); } +int mm_camcorder_get_exposure(MMHandleType camcorder, int *exposure) +{ + mmf_return_val_if_fail((void *)camcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); + + return _mmcamcorder_get_exposure(camcorder, exposure); +} + int mm_camcorder_get_focus_level(MMHandleType camcorder, int *level) { mmf_return_val_if_fail((void *)camcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index cef6346..33cb715 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -2266,6 +2266,52 @@ int _mmcamcorder_stop_focusing(MMHandleType handle) } } +int _mmcamcorder_get_exposure(MMHandleType handle, int *exposure) +{ + int ret = MM_ERROR_NONE; + int state = MM_CAMCORDER_STATE_NONE; + 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(exposure, MM_ERROR_CAMCORDER_INVALID_ARGUMENT); + + state = _mmcamcorder_get_state(handle); + if (state < MM_CAMCORDER_STATE_READY) { + ret = mm_camcorder_get_attributes(handle, NULL, + MMCAM_CAMERA_EXPOSURE_VALUE, exposure, + NULL); + + MMCAM_LOG_INFO("exposure[%d] from attribute[ret:0x%x]", *exposure, ret); + + return ret; + } + + 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_exposure(control, GST_CAMERA_CONTROL_EXPOSURE_VALUE, exposure, NULL)) { + MMCAM_LOG_ERROR("get exposure failed"); + return MM_ERROR_CAMCORDER_INTERNAL; + } + + MMCAM_LOG_INFO("exposure[%d] from device", *exposure); + + return MM_ERROR_NONE; +} + int _mmcamcorder_get_focus_level(MMHandleType handle, int *level) { GstCameraControl *control = NULL;