From d6ea3dcb91ba8eb0af9b61c4188dca56fecb8ed7 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Fri, 4 Aug 2023 15:26:02 +0900 Subject: [PATCH] Add new function to get exposure from device [Version] 0.10.296 [Issue Type] New feature Change-Id: I367574551a8859f60178c55b43d5581e96c2a30b Signed-off-by: Jeongmo Yang --- packaging/libmm-camcorder.spec | 2 +- src/include/mm_camcorder.h | 3 +++ src/include/mm_camcorder_internal.h | 3 +++ src/mm_camcorder.c | 7 ++++++ src/mm_camcorder_internal.c | 46 +++++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index c2e9124..889495d 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.295 +Version: 0.10.296 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_camcorder.h b/src/include/mm_camcorder.h index 961ecbf..a439c65 100644 --- a/src/include/mm_camcorder.h +++ b/src/include/mm_camcorder.h @@ -3538,6 +3538,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 f9aa9b1..76f98b2 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -1364,6 +1364,9 @@ void _mmcamcorder_emit_signal(MMHandleType handle, const char *object_name, /* external storage state management */ int _mmcamcorder_manage_external_storage_state(MMHandleType handle, int storage_state); +/* 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 b1ff8c2..226e626 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_log_level(void) { return _mmcamcorder_get_log_level(); diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 15647d2..20b5933 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -2281,6 +2281,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; +} + /*----------------------------------------------- | CAMCORDER INTERNAL LOCAL | -----------------------------------------------*/ -- 2.7.4