1. Add new function to set gdbus connection, 2. Bug fix for EXIF info 35/93635/4 accepted/tizen/3.0/ivi/20161028.134035 accepted/tizen/3.0/mobile/20161028.133143 accepted/tizen/3.0/tv/20161028.133311 accepted/tizen/3.0/wearable/20161028.133752 accepted/tizen/common/20161025.155109 accepted/tizen/common/20161027.073656 accepted/tizen/ivi/20161027.055026 accepted/tizen/mobile/20161027.054927 accepted/tizen/tv/20161027.055000 accepted/tizen/wearable/20161027.055016 submit/tizen/20161025.104308 submit/tizen/20161027.030209 submit/tizen_3.0/20161028.062323 submit/tizen_3.0/20161028.082423 submit/tizen_3.0_common/20161104.104000
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 25 Oct 2016 06:06:40 +0000 (15:06 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 25 Oct 2016 07:17:41 +0000 (16:17 +0900)
1. Sometimes, got crashed when get gdbus connection,
so do not get gdbus connection in camera module and get from outside(muse server)
2. EXIF info is missed, fixed it.

[Version] 0.2.54
[Profile] Common
[Issue Type] Update and bug fix
[Dependency module] libmm-camcorder, mmsvc-core
[Test] [M(T) - Boot=(OK), sdb=(OK), Home=(OK), Touch=(OK), Version=tizen-mobile_20161024.2]

Change-Id: I628804ad3b6b612b61f1550dc1f103f52b20cdd5
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
legacy/include/legacy_camera_internal.h
legacy/src/legacy_camera.c
legacy/src/legacy_camera_internal.c
muse/src/muse_camera_dispatcher.c
packaging/mmsvc-camera.spec

index ccfb764..8a41219 100644 (file)
@@ -38,7 +38,7 @@ extern "C" {
  * @retval #CAMERA_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval #CAMERA_ERROR_INVALID_OPERATION Invalid operation
  * @retval #CAMERA_ERROR_INVALID_STATE Invalid state
- * @pre        The camera state must be #CAMERA_STATE_CREATED by camera_create().
+ * @pre The camera state must be #CAMERA_STATE_CREATED by legacy_camera_create().
  */
 int legacy_camera_set_client_pid(camera_h camera, int pid);
 
@@ -54,6 +54,21 @@ int legacy_camera_set_client_pid(camera_h camera, int pid);
 void legacy_camera_emit_signal(camera_h camera, const char *object_name,
        const char *interface_name, const char *signal_name, int value);
 
+/**
+ * @brief Set gdbus connection created from outside.
+ * @ingroup CAPI_MEDIA_CAMERA_MUSED_MODULE
+ * @param[in] camera The handle to the camera
+ * @param[in] gdbus_conn The connection of gdbus
+ *
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #CAMERA_ERROR_NONE Successful
+ * @retval #CAMERA_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CAMERA_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #CAMERA_ERROR_INVALID_STATE Invalid state
+ * @pre The camera state must be #CAMERA_STATE_CREATED by legacy_camera_create().
+ */
+int legacy_camera_set_gdbus_connection(camera_h camera, void *gdbud_connection);
+
 
 #ifdef __cplusplus
 }
index eb696dd..5d81c54 100644 (file)
@@ -204,9 +204,12 @@ static gboolean __mm_capture_callback(MMCamcorderCaptureDataType *frame, MMCamco
                        ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
                                "captured-exif-raw-data", &exif, &exif_size,
                                NULL);
-                       if (ret == MM_ERROR_NONE) {
+                       if (ret == MM_ERROR_NONE &&
+                               exif && exif_size > 0) {
                                image.exif = exif;
                                image.exif_size = exif_size;
+                       } else {
+                               LOGW("invalid EXIF info %p, size %d", exif, exif_size);
                        }
                }
 
index 986336b..c270cf1 100644 (file)
@@ -68,3 +68,23 @@ void legacy_camera_emit_signal(camera_h camera, const char *object_name,
 
        return;
 }
+
+
+int legacy_camera_set_gdbus_connection(camera_h camera, void *gdbus_connection)
+{
+       int ret;
+       camera_s *handle = (camera_s *)camera;
+
+       if (handle == NULL) {
+               LOGE("NULL handle");
+               return CAMERA_ERROR_INVALID_PARAMETER;
+       }
+
+       LOGD("gdbus connection %p", gdbus_connection);
+
+       ret = mm_camcorder_set_attributes(handle->mm_handle, NULL,
+               MMCAM_GDBUS_CONNECTION, gdbus_connection, sizeof(gdbus_connection),
+               NULL);
+
+       return __convert_camera_error_code(__func__, ret);
+}
index e8b5d79..68a7525 100644 (file)
@@ -45,8 +45,6 @@ void _camera_dispatcher_callback_supported_theater_mode(int param1, void *user_d
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -58,8 +56,6 @@ void _camera_dispatcher_callback_supported_af_mode(int param1, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -71,8 +67,6 @@ void _camera_dispatcher_callback_supported_exposure_mode(int param1, void *user_
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -84,8 +78,6 @@ void _camera_dispatcher_callback_supported_iso_mode(int param1, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -97,8 +89,6 @@ void _camera_dispatcher_callback_supported_whitebalance(int param1, void *user_d
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -110,8 +100,6 @@ void _camera_dispatcher_callback_supported_effect(int param1, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -123,8 +111,6 @@ void _camera_dispatcher_callback_supported_scene_mode(int param1, void *user_dat
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -136,8 +122,6 @@ void _camera_dispatcher_callback_supported_flash_mode(int param1, void *user_dat
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -149,12 +133,8 @@ int _camera_dispatcher_callback_supported_flash_mode2(int param1, void *user_dat
 {
        int *count = (int *)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
-       if (count) {
+       if (count)
                (*count)++;
-               LOGD("count : %d", *count);
-       }
 
        return true;
 }
@@ -163,8 +143,6 @@ void _camera_dispatcher_callback_supported_fps(int param1, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -176,8 +154,6 @@ void _camera_dispatcher_callback_supported_fps_by_resolution(int param1, void *u
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -189,8 +165,6 @@ void _camera_dispatcher_callback_supported_stream_flip(int param1, void *user_da
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -202,8 +176,6 @@ void _camera_dispatcher_callback_supported_stream_rotation(int param1, void *use
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -215,8 +187,6 @@ void _camera_dispatcher_callback_supported_capture_format(int param1, void *user
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -228,8 +198,6 @@ void _camera_dispatcher_callback_supported_preview_format(int param1, void *user
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -241,8 +209,6 @@ void _camera_dispatcher_callback_supported_preview_resolution(int param1, int pa
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param1 : %d, param2 : %d", param1, param2);
-
        muse_camera_msg_event2(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -255,8 +221,6 @@ void _camera_dispatcher_callback_supported_capture_resolution(int param1, int pa
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param1 : %d, param2 : %d", param1, param2);
-
        muse_camera_msg_event2(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -269,8 +233,6 @@ void _camera_dispatcher_callback_supported_ptz_type(int param1, void *user_data)
 {
        muse_module_h module = (muse_module_h)user_data;
 
-       LOGD("Enter!! param : %d", param1);
-
        muse_camera_msg_event1(MUSE_CAMERA_CB_EVENT,
                MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PTZ_TYPE,
                MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
@@ -396,6 +358,8 @@ void _camera_dispatcher_capturing_cb(camera_image_data_s* image, camera_image_da
        }
 
        data_size_main = sizeof(camera_image_data_s) + image->size;
+       if (image->exif && image->exif_size > 0)
+               data_size_main += image->exif_size;
 
        /* alloc bo */
        bo_main = tbm_bo_alloc(muse_camera->bufmgr, data_size_main, TBM_BO_DEFAULT);
@@ -414,6 +378,11 @@ void _camera_dispatcher_capturing_cb(camera_image_data_s* image, camera_image_da
        memcpy(buf_pos, image, sizeof(camera_image_data_s));
        buf_pos += sizeof(camera_image_data_s);
        memcpy(buf_pos, image->data, image->size);
+       if (image->exif && image->exif_size > 0) {
+               buf_pos += image->size;
+               memcpy(buf_pos, image->exif, image->exif_size);
+       }
+
        tbm_bo_unmap(bo_main);
 
        tbm_key_main = tbm_bo_export(bo_main);
@@ -1029,6 +998,7 @@ int camera_dispatcher_create(muse_module_h module)
        int device_type;
        int client_fd = -1;
        int pid = 0;
+       void *gdbus_connection = NULL;
        intptr_t handle;
        muse_camera_handle_s *muse_camera = NULL;
        muse_camera_api_e api = MUSE_CAMERA_API_CREATE;
@@ -1059,8 +1029,9 @@ int camera_dispatcher_create(muse_module_h module)
 
        memset(muse_camera, 0x0, sizeof(muse_camera_handle_s));
 
-       if (muse_core_ipc_get_bufmgr(&muse_camera->bufmgr) != MM_ERROR_NONE) {
-               LOGE("muse_core_ipc_get_bufmgr failed");
+       if (muse_core_ipc_get_bufmgr(&muse_camera->bufmgr) != MM_ERROR_NONE ||
+               muse_core_ipc_get_gdbus_connection((GDBusConnection **)&gdbus_connection) != MM_ERROR_NONE) {
+               LOGE("tbm bufmgr or gdbus conntection failed %p %p", muse_camera->bufmgr, gdbus_connection);
 
                free(muse_camera);
                muse_camera = NULL;
@@ -1094,6 +1065,12 @@ int camera_dispatcher_create(muse_module_h module)
                goto _CREATE_ERROR;
        }
 
+       ret = legacy_camera_set_gdbus_connection(muse_camera->camera_handle, gdbus_connection);
+       if (ret != CAMERA_ERROR_NONE) {
+               LOGE("legacy_camera_set_gdbus_connection failed : 0x%x", ret);
+               goto _CREATE_ERROR;
+       }
+
        g_mutex_init(&muse_camera->list_lock);
        g_cond_init(&muse_camera->list_cond);
        g_mutex_init(&muse_camera->preview_cb_lock);
index aea44f7..ff1b6ef 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mmsvc-camera
 Summary:    A Camera module for muse server
-Version:    0.2.53
+Version:    0.2.54
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0