Update code for device state APIs 86/91586/1
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 10 Oct 2016 09:16:13 +0000 (18:16 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 10 Oct 2016 09:16:13 +0000 (18:16 +0900)
Add code to emit signal for device state change

[Version] 0.2.27
[Profile] Common
[Issue Type] Update
[Dependency module] libmm-camcorder
[Dependency commit] 6012f7ec5032f940e8446a7aec9a9ee001ba05c6
[Test] [M(T) - Boot=(OK), sdb=(OK), Home=(OK), Touch=(OK), Version=tizen-mobile_20161007.1]

Change-Id: I40a9d41d462fa959cada68d27d452ab203b7b4e0
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
legacy/include/legacy_recorder.h
legacy/include/legacy_recorder_internal.h
legacy/src/legacy_recorder_internal.c
muse/include/muse_recorder.h
muse/src/muse_recorder_dispatcher.c
packaging/mmsvc-recorder.spec

index 574750d..78363f5 100644 (file)
@@ -171,7 +171,7 @@ typedef enum {
  * @since_tizen 3.0
  */
 typedef enum {
-       RECORDER_DEVICE_STATE_NULL = 0,     /**< No recorder is working */
+       RECORDER_DEVICE_STATE_IDLE = 0,     /**< No recording in progress */
        RECORDER_DEVICE_STATE_RECORDING,    /**< Now recording */
        RECORDER_DEVICE_STATE_PAUSED        /**< All recordings are paused */
 } recorder_device_state_e;
index ab344c3..2fec16a 100644 (file)
@@ -42,6 +42,18 @@ extern "C" {
  */
 int legacy_recorder_set_client_pid(recorder_h recorder, int pid);
 
+/**
+ * @brief Emit signal to notify some information.
+ * @ingroup CAPI_MEDIA_RECORDER_MUSED_MODULE
+ * @param[in] recorder The handle to the recorder
+ * @param[in] object_name The name of signal object
+ * @param[in] interface_name The name of signal interface
+ * @param[in] signal_name The name of signal
+ * @param[in] value The value of signal to emit
+ */
+void legacy_recorder_emit_signal(recorder_h recorder, const char *object_name,
+       const char *interface_name, const char *signal_name, int value);
+
 
 #ifdef __cplusplus
 }
index 0454027..bb6b6bb 100644 (file)
@@ -45,3 +45,20 @@ int legacy_recorder_set_client_pid(recorder_h recorder, int pid)
 
        return __convert_recorder_error_code(__func__, ret);
 }
+
+
+void legacy_recorder_emit_signal(recorder_h recorder, const char *object_name,
+       const char *interface_name, const char *signal_name, int value)
+{
+       recorder_s *handle = (recorder_s *)recorder;
+
+       if (!handle) {
+               LOGE("NULL handle");
+               return;
+       }
+
+       mm_camcorder_emit_signal(handle->mm_handle,
+               object_name, interface_name, signal_name, value);
+
+       return;
+}
index b73f3ab..5839ef8 100644 (file)
@@ -145,7 +145,8 @@ typedef enum {
  */
 typedef enum {
        MUSE_RECORDER_TYPE_AUDIO = 0,
-       MUSE_RECORDER_TYPE_VIDEO
+       MUSE_RECORDER_TYPE_VIDEO,
+       MUSE_RECORDER_TYPE_NUM
 } muse_recorder_type_e;
 
 /**
index 9f4ed79..8c1fc56 100644 (file)
@@ -109,10 +109,12 @@ void _recorder_disp_state_changed_cb(recorder_state_e previous, recorder_state_e
        muse_module_h module = (muse_module_h)user_data;
        muse_recorder_handle_s *muse_recorder = NULL;
        char value_key[KEY_LENGTH] = {'\0',};
-       int set_value = -1;
-       int get_value = 0;
+       int emit_value = -1;
        int device_recording = 0;
        int device_paused = 0;
+       int device_status = -1;
+       int current_state = 0;
+       static int device_state[MUSE_RECORDER_TYPE_NUM] = {0, 0}; /* 0:MUSE_RECORDER_TYPE_AUDIO, 1:MUSE_RECORDER_TYPE_VIDEO */
 
        if (module == NULL) {
                LOGE("NULL module");
@@ -135,20 +137,22 @@ void _recorder_disp_state_changed_cb(recorder_state_e previous, recorder_state_e
 
        g_mutex_lock(&g_recorder_device_state_lock);
 
-       /* define key name */
+       /* make key name */
        if (muse_recorder->type == MUSE_RECORDER_TYPE_AUDIO)
                snprintf(value_key, KEY_LENGTH, "%s", RECORDER_DEVICE_STATE_KEY_AUDIO);
        else
                snprintf(value_key, KEY_LENGTH, "%s", RECORDER_DEVICE_STATE_KEY_VIDEO);
 
-       /* get current state */
-       muse_core_client_get_value(module, value_key, &get_value);
-       device_recording = get_value >> 16;
-       device_paused = 0x0000ffff & get_value;
+       /* get current status */
+       muse_core_client_get_value(module, value_key, &device_status);
+       device_recording = device_status >> 16;
+       device_paused = 0x0000ffff & device_status;
+
+       LOGD("get [%s] 0x%8x", value_key, device_status);
 
        LOGD("previous RECORDING %d, PAUSED %d", device_recording, device_paused);
 
-       /* adjust state */
+       /* adjust status */
        if (current == RECORDER_STATE_RECORDING)
                device_recording++;
        else if (current == RECORDER_STATE_PAUSED)
@@ -161,12 +165,37 @@ void _recorder_disp_state_changed_cb(recorder_state_e previous, recorder_state_e
 
        LOGD("current RECORDING %d, PAUSED %d", device_recording, device_paused);
 
-       /* make set value */
-       set_value = device_recording << 16 | device_paused;
+       /* make new status */
+       device_status = device_recording << 16 | device_paused;
+
+       LOGD("set [%s] 0x%8x", value_key, device_status);
+
+       muse_core_client_set_value(module, value_key, device_status);
 
-       LOGD("device[%s] state set : 0x%x", value_key, set_value);
+       /* check whether emit signal or not */
+       if (device_recording > 0)
+               current_state = RECORDER_DEVICE_STATE_RECORDING;
+       else if (device_paused > 0)
+               current_state = RECORDER_DEVICE_STATE_PAUSED;
+       else
+               current_state = RECORDER_DEVICE_STATE_IDLE;
 
-       muse_core_client_set_value(module, value_key, set_value);
+       if (current_state != device_state[muse_recorder->type]) {
+               LOGD("old %d -> new %d", device_state[muse_recorder->type], current_state);
+
+               emit_value = muse_recorder->type << 16 | current_state;
+               device_state[muse_recorder->type] = current_state;
+       }
+
+       if (emit_value != -1) {
+               LOGD("recorder devce state change signal [0x8x]", emit_value);
+
+               legacy_recorder_emit_signal(muse_recorder->recorder_handle,
+                       MM_CAMCORDER_DBUS_OBJECT,
+                       MM_CAMCORDER_DBUS_INTERFACE_RECORDER,
+                       MM_CAMCORDER_DBUS_SIGNAL_STATE_CHANGED,
+                       emit_value);
+       }
 
        g_mutex_unlock(&g_recorder_device_state_lock);
 
@@ -1920,7 +1949,7 @@ int recorder_dispatcher_get_device_state(muse_module_h module)
        int device_paused = 0;
        recorder_h recorder = NULL;
        recorder_type_e recorder_type = RECORDER_TYPE_AUDIO;
-       recorder_device_state_e get_device_state = RECORDER_DEVICE_STATE_NULL;
+       recorder_device_state_e get_device_state = RECORDER_DEVICE_STATE_IDLE;
        muse_recorder_api_e api = MUSE_RECORDER_API_GET_DEVICE_STATE;
        muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
 
index 01ab030..df4887a 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mmsvc-recorder
 Summary:    A Recorder module for muse server
-Version:    0.2.26
+Version:    0.2.27
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0