Add new function to get exposure from device 77/296777/1 accepted/tizen/7.0/unified/20230808.014653
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 06:26:02 +0000 (15:26 +0900)
[Version] 0.10.294
[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 a4f9090b9219f1beee3d9f3c8862944e7ad5f6d1..f0deab5b159fd0b0dd7ceb3f2a27da05a3b84e61 100755 (executable)
@@ -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
index 0eecfc02daf390a43d40097ee5207627cfc119cd..aaf8cf422e4982a0b788d9c35e8a800dc1483854 100644 (file)
@@ -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);
+
 /**
        @}
  */
index b984024b6e5d673f5dd60d00eadbb1760f10e0f7..111d0f06b210da2adbd2ebf5b9b8b0bca90b0fdc 100644 (file)
@@ -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
index a4c046a38b786834950998d696c8af439dfafd93..b94901243708efc2322ece495789b397afda7344 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_focus_level(MMHandleType camcorder, int *level)
 {
        mmf_return_val_if_fail((void *)camcorder, MM_ERROR_CAMCORDER_INVALID_ARGUMENT);
index cef634661914686da913c2b65c558cbd543d27a0..33cb715b546ff90170e85d90cfc8f9ca69c6b933 100644 (file)
@@ -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;