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 c2e9124a02efe029b3b77b68b465b7365a14b00d..889495d96e5d4729c4505184ad7673135f3520ec 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 961ecbfbfcd81c1cfc02141dadb5c219b1f2126e..a439c654f3ef71fbe53e96c29da99c7d940726e8 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 f9aa9b18689e3d627f81265186941721acf27950..76f98b2ed16b7a5c7018630ce0574290b0c44207 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 b1ff8c25d25492bac802c4bcc0dc8dd652fbd2a4..226e6269200a02885cb23fca3decbf6f2f66a66f 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 15647d25389f09e221f1105dd455bcf490c90a6d..20b5933d2c2ac2dde6837745a2666b69b80806e4 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              |
 -----------------------------------------------*/