Add new function to get exposure from device 88/296788/1 accepted/tizen/unified/20230808.011417
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 4 Aug 2023 06:26:02 +0000 (15:26 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 4 Aug 2023 07:47:31 +0000 (16:47 +0900)
[Version] 0.10.296
[Issue Type] New feature

Change-Id: I367574551a8859f60178c55b43d5581e96c2a30b
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-camcorder.spec
src/include/mm_camcorder.h
src/include/mm_camcorder_internal.h
src/mm_camcorder.c
src/mm_camcorder_internal.c

index c2e9124..889495d 100755 (executable)
@@ -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
index 961ecbf..a439c65 100644 (file)
@@ -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);
+
 /**
        @}
  */
index f9aa9b1..76f98b2 100644 (file)
@@ -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
index b1ff8c2..226e626 100644 (file)
@@ -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();
index 15647d2..20b5933 100644 (file)
@@ -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              |
 -----------------------------------------------*/