Support DPM popup
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_internal.c
index e7215a1..6b07da4 100644 (file)
@@ -62,7 +62,7 @@
 #define DPM_DISALLOWED                          0
 
 #ifdef _MMCAMCORDER_MURPHY_SUPPORT
-#define __MMCAMCORDER_RESOURCE_WAIT_TIME        5
+#define __MMCAMCORDER_RESOURCE_WAIT_TIME        3
 #endif /* _MMCAMCORDER_MURPHY_SUPPORT */
 
 
@@ -163,8 +163,11 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
 
        if (info->videodev_type != MM_VIDEO_DEVICE_NONE) {
                /* init for gdbus */
+               hcamcorder->gdbus_info_sound.mm_handle = hcamcorder;
                g_mutex_init(&hcamcorder->gdbus_info_sound.sync_mutex);
                g_cond_init(&hcamcorder->gdbus_info_sound.sync_cond);
+
+               hcamcorder->gdbus_info_solo_sound.mm_handle = hcamcorder;
                g_mutex_init(&hcamcorder->gdbus_info_solo_sound.sync_mutex);
                g_cond_init(&hcamcorder->gdbus_info_solo_sound.sync_cond);
        }
@@ -1058,6 +1061,9 @@ int _mmcamcorder_realize(MMHandleType handle)
                                if (dpm_camera_state == DPM_DISALLOWED) {
                                        _mmcam_dbg_err("CAMERA DISALLOWED by DPM");
                                        ret = MM_ERROR_POLICY_RESTRICTED;
+
+                                       _mmcamcorder_request_dpm_popup(hcamcorder->gdbus_conn, "camera");
+
                                        goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
                                }
                        } else {
@@ -1746,6 +1752,9 @@ int _mmcamcorder_record(MMHandleType handle)
                        if (dpm_mic_state == DPM_DISALLOWED) {
                                _mmcam_dbg_err("MIC DISALLOWED by DPM");
                                ret = MM_ERROR_COMMON_INVALID_PERMISSION;
+
+                               _mmcamcorder_request_dpm_popup(hcamcorder->gdbus_conn, "microphone");
+
                                goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
                        }
                } else {
@@ -3193,9 +3202,9 @@ GstBusSyncReply _mmcamcorder_encode_pipeline_bus_sync_callback(GstBus *bus, GstM
 
                                _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
                        }
-               }
 
-               goto DROP_MESSAGE;
+                       goto DROP_MESSAGE;
+               }
        }
 
        if (err) {
@@ -3313,6 +3322,9 @@ void _mmcamcorder_sound_signal_callback(mm_sound_signal_name_t signal, int value
                }
        }
 
+       /* reset flag not to run sound focus related code since now */
+       hcamcorder->sound_focus_register = FALSE;
+
        _MMCAMCORDER_UNLOCK_ASM(hcamcorder);
 
        _mmcam_dbg_warn("done");
@@ -3364,14 +3376,14 @@ void _mmcamcorder_sound_focus_watch_cb(int id, mm_sound_focus_type_e focus_type,
        if (focus_state == FOCUS_IS_RELEASED) {
                _MMCamcorderMsgItem msg;
 
-               _mmcam_dbg_log("other process's FOCUS is acquired");
+               _mmcam_dbg_log("other process's FOCUS is released");
 
                msg.id = MM_MESSAGE_READY_TO_RESUME;
                _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg);
 
                _mmcam_dbg_log("Finish opeartion");
        } else if (focus_state == FOCUS_IS_ACQUIRED) {
-               _mmcam_dbg_log("other process's FOCUS is released : Stop pipeline[state:%d]", current_state);
+               _mmcam_dbg_log("other process's FOCUS is acquired : Stop pipeline[state:%d]", current_state);
 
                __mmcamcorder_force_stop(hcamcorder);
 
@@ -3417,6 +3429,8 @@ void _mmcamcorder_dpm_camera_policy_changed_cb(const char *name, const char *val
                hcamcorder->state_change_by_system = _MMCAMCORDER_STATE_CHANGE_NORMAL;
 
                _MMCAMCORDER_UNLOCK_ASM(hcamcorder);
+
+               _mmcamcorder_request_dpm_popup(hcamcorder->gdbus_conn, "camera");
        }
 
        _mmcam_dbg_warn("done");
@@ -3776,7 +3790,8 @@ void __mmcamcorder_force_stop(mmf_camcorder_t *hcamcorder)
                        _mmcam_dbg_warn("Stop recording.");
 
                        while ((itr_cnt--) && ((result = _mmcamcorder_commit((MMHandleType)hcamcorder)) != MM_ERROR_NONE)) {
-                               _mmcam_dbg_warn("Can't commit.(%x)", result);
+                               _mmcam_dbg_warn("Can't commit.(%x), cancel it.", result);
+                               _mmcamcorder_cancel((MMHandleType)hcamcorder);
                        }
 
                        break;
@@ -4012,6 +4027,8 @@ static gint __mmcamcorder_gst_handle_resource_error(MMHandleType handle, int cod
 
                        _MMCAMCORDER_UNLOCK_ASM(hcamcorder);
 
+                       _mmcamcorder_request_dpm_popup(hcamcorder->gdbus_conn, "microphone");
+
                        return MM_ERROR_POLICY_RESTRICTED;
                }
        }