Remove codes related to session backward compatibility
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_attribute.c
index c6a58c3..5e11308 100644 (file)
@@ -37,6 +37,7 @@
 #define MMCAMCORDER_DEFAULT_CAMERA_HEIGHT       480
 #define MMCAMCORDER_DEFAULT_ENCODED_PREVIEW_BITRATE (1024*1024*10)
 #define MMCAMCORDER_DEFAULT_ENCODED_PREVIEW_GOP_INTERVAL 1000
+#define MMCAMCORDER_DEFAULT_REPLAY_GAIN_REFERENCE_LEVEL  89.0
 
 /*---------------------------------------------------------------------------------------
 |    GLOBAL VARIABLE DEFINITIONS for internal                                          |
@@ -216,7 +217,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "camera-device-name",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -261,7 +262,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "audio-volume",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)1},
+                       {.value_double = 1.0},
                        MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
                        {.double_min = 0.0},
                        {.double_max = 10.0},
@@ -383,7 +384,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "camera-recording-motion-rate",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)1},
+                       {.value_double = 1.0},
                        MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
                        {.double_min = 0.0},
                        {.double_max = _MMCAMCORDER_MAX_DOUBLE},
@@ -671,7 +672,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "display-handle",
                        MMF_VALUE_TYPE_DATA,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -838,7 +839,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "target-filename",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -882,7 +883,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-image-description",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -904,7 +905,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-software",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -916,7 +917,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-latitude",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)0},
+                       {.value_double = 0.0},
                        MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
                        {.double_min = -360.0},
                        {.double_max = 360.0},
@@ -927,7 +928,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-longitude",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)0},
+                       {.value_double = 0.0},
                        MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
                        {.double_min = -360.0},
                        {.double_max = 360.0},
@@ -938,7 +939,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-altitude",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)0},
+                       {.value_double = 0.0},
                        MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
                        {.double_min = -999999.0},
                        {.double_max = 999999.0},
@@ -1093,7 +1094,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "camera-focal-length",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)0},
+                       {.value_double = 0.0},
                        MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
                        {.double_min = 0.0},
                        {.double_max = 1000.0},
@@ -1138,7 +1139,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-gps-time-stamp",
                        MMF_VALUE_TYPE_DOUBLE,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)0},
+                       {.value_double = 0.0},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1149,7 +1150,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-gps-date-stamp",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1160,7 +1161,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "tag-gps-processing-method",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1182,7 +1183,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "captured-screennail",
                        MMF_VALUE_TYPE_DATA,
                        MM_ATTRS_FLAG_READABLE,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1282,7 +1283,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "captured-exif-raw-data",
                        MMF_VALUE_TYPE_DATA,
                        MM_ATTRS_FLAG_READABLE,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1293,7 +1294,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "display-evas-surface-sink",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_READABLE,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1504,29 +1505,29 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "display-socket-path",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
                        NULL,
                },
                {
-                       MM_CAM_PID_FOR_SOUND_FOCUS,
-                       "pid-for-sound-focus",
+                       MM_CAM_CLIENT_PID,
+                       "client-pid",
                        MMF_VALUE_TYPE_INT,
                        MM_ATTRS_FLAG_RW,
                        {(void*)0},
                        MM_ATTRS_VALID_TYPE_INT_RANGE,
                        {.int_min = 0},
                        {.int_max = _MMCAMCORDER_MAX_INT},
-                       _mmcamcorder_commit_pid_for_sound_focus,
+                       NULL,
                },
                {
                        MM_CAM_ROOT_DIRECTORY,
                        "root-directory",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1548,7 +1549,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "sound-stream-type",
                        MMF_VALUE_TYPE_STRING,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1570,7 +1571,7 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "display-reuse-element",
                        MMF_VALUE_TYPE_DATA,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
@@ -1581,11 +1582,33 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
                        "gdbus-connection",
                        MMF_VALUE_TYPE_DATA,
                        MM_ATTRS_FLAG_RW,
-                       {(void*)NULL},
+                       {NULL},
                        MM_ATTRS_VALID_TYPE_NONE,
                        {0},
                        {0},
                        NULL,
+               },
+               {
+                       MM_CAM_AUDIO_REPLAY_GAIN_ENABLE,
+                       "audio-replay-gain-enable",
+                       MMF_VALUE_TYPE_INT,
+                       MM_ATTRS_FLAG_RW,
+                       {(void*)FALSE},
+                       MM_ATTRS_VALID_TYPE_INT_RANGE,
+                       {.int_min = 0},
+                       {.int_max = 1},
+                       _mmcamcorder_commit_audio_replay_gain,
+               },
+               {
+                       MM_CAM_AUDIO_REPLAY_GAIN_REFERENCE_LEVEL,
+                       "audio-replay-gain-reference-level",
+                       MMF_VALUE_TYPE_DOUBLE,
+                       MM_ATTRS_FLAG_RW,
+                       {.value_double = MMCAMCORDER_DEFAULT_REPLAY_GAIN_REFERENCE_LEVEL},
+                       MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
+                       {.double_min = 0.0},
+                       {.double_max = 150.0},
+                       _mmcamcorder_commit_audio_replay_gain,
                }
        };
 
@@ -1630,41 +1653,46 @@ _mmcamcorder_alloc_attribute(MMHandleType handle, MMCamPreset *info)
        __mmcamcorder_set_conf_to_valid_info(handle);
 
        for (idx = 0; idx < attr_count; idx++) {
-/*             _mmcam_dbg_log("Valid type [%s:%d, %d, %d]", cam_attrs_const_info[idx].name, cam_attrs_const_info[idx].validity_type
-                       , cam_attrs_const_info[idx].validity_value1, cam_attrs_const_info[idx].validity_value2);
+               mm_cam_attr_construct_info *attr_info = &hcamcorder->cam_attrs_const_info[idx];
+
+/*
+               _mmcam_dbg_log("Valid type [%s:%d, %d, %d]",
+                       attr_info->name, attr_info->validity_type,
+                       attr_info->validity_value1, attr_info->validity_value2);
 */
-               mmf_attrs_set_valid_type(attrs, idx, hcamcorder->cam_attrs_const_info[idx].validity_type);
+               mmf_attrs_set_valid_type(attrs, idx, attr_info->validity_type);
 
-               switch (hcamcorder->cam_attrs_const_info[idx].validity_type) {
+               switch (attr_info->validity_type) {
                case MM_ATTRS_VALID_TYPE_INT_ARRAY:
-                       if (hcamcorder->cam_attrs_const_info[idx].validity_value_1.int_array &&
-                           hcamcorder->cam_attrs_const_info[idx].validity_value_2.count > 0) {
+                       if (attr_info->validity_value_1.int_array &&
+                           attr_info->validity_value_2.count > 0) {
                                mmf_attrs_set_valid_array(attrs, idx,
-                                       (const int *)(hcamcorder->cam_attrs_const_info[idx].validity_value_1.int_array),
-                                       hcamcorder->cam_attrs_const_info[idx].validity_value_2.count,
-                                       hcamcorder->cam_attrs_const_info[idx].default_value.value_int);
+                                       (const int *)(attr_info->validity_value_1.int_array),
+                                       attr_info->validity_value_2.count,
+                                       attr_info->default_value.value_int);
                        }
                        break;
                case MM_ATTRS_VALID_TYPE_INT_RANGE:
                        mmf_attrs_set_valid_range(attrs, idx,
-                               hcamcorder->cam_attrs_const_info[idx].validity_value_1.int_min,
-                               hcamcorder->cam_attrs_const_info[idx].validity_value_2.int_max,
-                               hcamcorder->cam_attrs_const_info[idx].default_value.value_int);
+                               attr_info->validity_value_1.int_min,
+                               attr_info->validity_value_2.int_max,
+                               attr_info->default_value.value_int);
                        break;
                case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
-                       if (hcamcorder->cam_attrs_const_info[idx].validity_value_1.double_array &&
-                           hcamcorder->cam_attrs_const_info[idx].validity_value_2.count > 0) {
+                       if (attr_info->validity_value_1.double_array &&
+                           attr_info->validity_value_2.count > 0) {
                                mmf_attrs_set_valid_double_array(attrs, idx,
-                                       (const double *)(hcamcorder->cam_attrs_const_info[idx].validity_value_1.double_array),
-                                       hcamcorder->cam_attrs_const_info[idx].validity_value_2.count,
-                                       hcamcorder->cam_attrs_const_info[idx].default_value.value_double);
+                                       (const double *)(attr_info->validity_value_1.double_array),
+                                       attr_info->validity_value_2.count,
+                                       attr_info->default_value.value_double);
                        }
                        break;
                case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
                        mmf_attrs_set_valid_double_range(attrs, idx,
-                               hcamcorder->cam_attrs_const_info[idx].validity_value_1.double_min,
-                               hcamcorder->cam_attrs_const_info[idx].validity_value_2.double_max,
-                               hcamcorder->cam_attrs_const_info[idx].default_value.value_double);
+                               attr_info->validity_value_1.double_min,
+                               attr_info->validity_value_2.double_max,
+                               attr_info->default_value.value_double);
+                       ((mmf_attrs_t *)attrs)->items[idx].value.value.d_val = attr_info->default_value.value_double;
                        break;
                case MM_ATTRS_VALID_TYPE_NONE:
                        break;
@@ -4500,100 +4528,6 @@ bool _mmcamcorder_commit_encoded_preview_gop_interval(MMHandleType handle, int a
 }
 
 
-bool _mmcamcorder_commit_pid_for_sound_focus(MMHandleType handle, int attr_idx, const mmf_value_t *value)
-{
-       int new_pid = 0;
-       int ret = 0;
-       int current_state = MM_CAMCORDER_STATE_NONE;
-       mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
-
-       mmf_return_val_if_fail(hcamcorder && value, FALSE);
-
-       /* state check */
-       current_state = _mmcamcorder_get_state(handle);
-       if (current_state > MM_CAMCORDER_STATE_NULL) {
-               _mmcam_dbg_log("invalid state %d", current_state);
-               hcamcorder->error_code = MM_ERROR_CAMCORDER_INVALID_STATE;
-               return FALSE;
-       }
-
-       new_pid = value->value.i_val;
-
-       _mmcam_dbg_warn("Commit : pid %d, current focus id %d, subscribe id %u",
-               new_pid, hcamcorder->sound_focus_id, hcamcorder->sound_focus_subscribe_id);
-
-       /* unregister sound focus and unsubscribe sound signal before set new one */
-       if (hcamcorder->sound_focus_id > 0) {
-               mm_sound_unregister_focus(hcamcorder->sound_focus_id);
-               _mmcam_dbg_log("unregister sound focus done");
-               hcamcorder->sound_focus_id = 0;
-       }
-
-       if (hcamcorder->sound_focus_subscribe_id > 0) {
-               mm_sound_unsubscribe_signal(hcamcorder->sound_focus_subscribe_id);
-               _mmcam_dbg_log("unsubscribe sound signal done");
-               hcamcorder->sound_focus_subscribe_id = 0;
-       }
-
-       ret = _mm_session_util_read_information(new_pid, &hcamcorder->session_type, &hcamcorder->session_flags);
-       if (ret == MM_ERROR_NONE) {
-               if (hcamcorder->session_type == MM_SESSION_TYPE_REPLACED_BY_STREAM) {
-                       hcamcorder->sound_focus_register = FALSE;
-                       _mmcam_dbg_warn("no need to use sound focus internally");
-               } else {
-                       /* check my session type : allow only media & call series here */
-                       if ((hcamcorder->session_type != MM_SESSION_TYPE_MEDIA) &&
-                               (hcamcorder->session_type != MM_SESSION_TYPE_MEDIA_RECORD) &&
-                               (hcamcorder->session_type != MM_SESSION_TYPE_CALL) &&
-                               (hcamcorder->session_type != MM_SESSION_TYPE_VIDEOCALL) &&
-                               (hcamcorder->session_type != MM_SESSION_TYPE_VOIP)) {
-                               _mmcam_dbg_err("Blocked by session policy, my session_type[%s]", hcamcorder->session_type);
-                               hcamcorder->error_code = MM_ERROR_POLICY_BLOCKED;
-                               return FALSE;
-                       }
-
-                       ret = mm_sound_focus_get_id(&hcamcorder->sound_focus_id);
-                       if (ret != MM_ERROR_NONE) {
-                               _mmcam_dbg_err("mm_sound_focus_get_id failed");
-                               hcamcorder->error_code = MM_ERROR_POLICY_BLOCKED;
-                               return FALSE;
-                       }
-
-                       ret = mm_sound_register_focus_for_session(hcamcorder->sound_focus_id,
-                               new_pid, "media", _mmcamcorder_sound_focus_cb, hcamcorder);
-                       if (ret != MM_ERROR_NONE) {
-                               _mmcam_dbg_err("mm_sound_register_focus_for_session failed 0x%x", ret);
-                               hcamcorder->sound_focus_id = 0;
-                               hcamcorder->error_code = MM_ERROR_POLICY_BLOCKED;
-                               return FALSE;
-                       }
-
-                       hcamcorder->sound_focus_register = TRUE;
-
-                       _mmcam_dbg_log("mm_sound_register_focus_for_session done - id %d, session type %d, flags 0x%x",
-                               hcamcorder->sound_focus_id, hcamcorder->session_type, hcamcorder->session_flags);
-               }
-       } else {
-               hcamcorder->session_type = 0;
-               hcamcorder->session_flags = 0;
-               hcamcorder->sound_focus_register = TRUE;
-
-               _mmcam_dbg_warn("read session info failed. sound focus watch cb will be set.");
-
-               ret = mm_sound_subscribe_signal_for_daemon(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS,
-                       new_pid, &hcamcorder->sound_focus_subscribe_id,
-                       (mm_sound_signal_callback)_mmcamcorder_sound_signal_callback, (void*)hcamcorder);
-               if (ret != MM_ERROR_NONE) {
-                       _mmcam_dbg_err("subscribe sound signal failed [0x%x]", ret);
-                       hcamcorder->error_code = MM_ERROR_POLICY_BLOCKED;
-                       return FALSE;
-               }
-       }
-
-       return TRUE;
-}
-
-
 bool _mmcamcorder_commit_sound_stream_info(MMHandleType handle, int attr_idx, const mmf_value_t *value)
 {
        int stream_index = 0;
@@ -4616,9 +4550,6 @@ bool _mmcamcorder_commit_sound_stream_info(MMHandleType handle, int attr_idx, co
                return FALSE;
        }
 
-       /* unset watch callback if existed */
-       _mmcamcorder_sound_signal_callback(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, 1, (void *)handle);
-
        sc = MMF_CAMCORDER_SUBCONTEXT(handle);
        if (!sc || !sc->encode_element ||
            !sc->encode_element[_MMCAMCORDER_AUDIOSRC_SRC].gst) {
@@ -4649,6 +4580,58 @@ bool _mmcamcorder_commit_tag(MMHandleType handle, int attr_idx, const mmf_value_
        return TRUE;
 }
 
+bool _mmcamcorder_commit_audio_replay_gain(MMHandleType handle, int attr_idx, const mmf_value_t *value)
+{
+       mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
+
+       mmf_return_val_if_fail(hcamcorder && value, FALSE);
+
+       if (attr_idx == MM_CAM_AUDIO_REPLAY_GAIN_ENABLE) {
+               /* Replay gain enable */
+               int current_state = MM_CAMCORDER_STATE_NONE;
+               int audio_disable = FALSE;
+
+               current_state = _mmcamcorder_get_state(handle);
+               if (current_state >= MM_CAMCORDER_STATE_RECORDING) {
+                       _mmcam_dbg_err("Can not set replay gain enable [state : %d]", current_state);
+                       hcamcorder->error_code = MM_ERROR_CAMCORDER_INVALID_STATE;
+                       return FALSE;
+               }
+
+               mm_camcorder_get_attributes(handle, NULL,
+                       MMCAM_AUDIO_DISABLE, &audio_disable,
+                       NULL);
+
+               if (audio_disable) {
+                       _mmcam_dbg_err("audio is disabled");
+                       hcamcorder->error_code = MM_ERROR_CAMCORDER_INVALID_CONDITION;
+                       return FALSE;
+               }
+
+               _mmcam_dbg_log("set replay gain enable : %d", value->value.i_val);
+       } else if (attr_idx == MM_CAM_AUDIO_REPLAY_GAIN_REFERENCE_LEVEL) {
+               /* Replay gain reference level */
+               int replay_gain_enable = FALSE;
+
+               mm_camcorder_get_attributes(handle, NULL,
+                       MMCAM_AUDIO_REPLAY_GAIN_ENABLE, &replay_gain_enable,
+                       NULL);
+
+               if (replay_gain_enable == FALSE) {
+                       _mmcam_dbg_err("replay gain is disabled");
+                       hcamcorder->error_code = MM_ERROR_CAMCORDER_INVALID_CONDITION;
+                       return FALSE;
+               }
+
+               _mmcam_dbg_log("set reference level for replay gain : %ld dB", value->value.d_val);
+       } else {
+               _mmcam_dbg_err("unknown attribute id %d", attr_idx);
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
 
 static bool __mmcamcorder_attrs_is_supported(MMHandleType handle, int idx)
 {