Replace "waylandsink" by "tizenwlsink"
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_attribute.c
index 10c6213..58c98af 100644 (file)
@@ -1747,7 +1747,7 @@ _mmcamcorder_set_attributes(MMHandleType handle, char **err_attr_name, const cha
        if (attrs) {
                ret = __mmcamcorder_check_valid_pair(handle, err_attr_name, attribute_name, var_args);
        } else {
-               _mmcam_dbg_err("handle 0x%x, attrs is NULL, attr name [%s]", handle, attribute_name);
+               _mmcam_dbg_err("handle %p, attrs is NULL, attr name [%s]", handle, attribute_name);
                ret = MM_ERROR_CAMCORDER_NOT_INITIALIZED;
        }
 
@@ -2004,6 +2004,7 @@ bool _mmcamcorder_commit_capture_break_cont_shot(MMHandleType handle, int attr_i
        const char *videosrc_name = NULL;
        mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
        _MMCamcorderSubContext *sc = NULL;
+       _MMCamcorderImageInfo *info = NULL;
        GstCameraControl *control = NULL;
        type_element *VideosrcElement = NULL;
 
@@ -2022,7 +2023,18 @@ bool _mmcamcorder_commit_capture_break_cont_shot(MMHandleType handle, int attr_i
        if (!sc)
                return TRUE;
 
+       info = sc->info_image;
+       if (!info) {
+               _mmcam_dbg_err("info image is NULL");
+               return FALSE;
+       }
+
        if (ivalue && current_state == MM_CAMCORDER_STATE_CAPTURING) {
+               if (info->capture_send_count > 0) {
+                       info->capturing = FALSE;
+                       _mmcam_dbg_warn("capturing -> FALSE and skip capture callback since now");
+               }
+
                if (!GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
                        _mmcam_dbg_warn("Can't cast Video source into camera control.");
                        return TRUE;
@@ -2563,9 +2575,7 @@ bool _mmcamcorder_commit_camera_ptz_type(MMHandleType handle, int attr_idx, cons
                        }
                }
 
-               if (item == NULL) {
-                       _mmcam_dbg_warn("failed to find tilt control channel");
-               }
+               _mmcam_dbg_warn("failed to find tilt control channel");
        }
 
        return FALSE;
@@ -2630,9 +2640,7 @@ bool _mmcamcorder_commit_camera_pan(MMHandleType handle, int attr_idx, const mmf
                        }
                }
 
-               if (item == NULL) {
-                       _mmcam_dbg_warn("failed to find pan control channel");
-               }
+               _mmcam_dbg_warn("failed to find pan control channel");
        }
 
        return FALSE;
@@ -2697,9 +2705,7 @@ bool _mmcamcorder_commit_camera_tilt(MMHandleType handle, int attr_idx, const mm
                        }
                }
 
-               if (item == NULL) {
-                       _mmcam_dbg_warn("failed to find tilt control channel");
-               }
+               _mmcam_dbg_warn("failed to find tilt control channel");
        }
 
        return FALSE;
@@ -3389,20 +3395,11 @@ bool _mmcamcorder_commit_image_encoder_quality(MMHandleType handle, int attr_idx
 
 bool _mmcamcorder_commit_target_filename(MMHandleType handle, int attr_idx, const mmf_value_t *value)
 {
-       int ret = MM_ERROR_NONE;
        int size = 0;
        const char *filename = NULL;
-       _MMCamcorderSubContext *sc = NULL;
-       GstElement *encode_link = NULL;
-       GstElement *encode_sink = NULL;
-       GstElement *encode_pipeline = NULL;
 
        mmf_return_val_if_fail(handle && value, FALSE);
 
-       sc = MMF_CAMCORDER_SUBCONTEXT(handle);
-       if (!sc)
-               return TRUE;
-
        /* get string */
        filename = mmf_value_get_string(value, &size);
        if (filename == NULL) {
@@ -3410,84 +3407,7 @@ bool _mmcamcorder_commit_target_filename(MMHandleType handle, int attr_idx, cons
                return FALSE;
        }
 
-       if (sc->info_video) {
-               SAFE_G_FREE(sc->info_video->filename);
-               sc->info_video->filename = g_strdup(filename);
-               if (sc->info_video->filename == NULL) {
-                       _mmcam_dbg_err("failed to strdup filename [%s]", filename);
-                       return FALSE;
-               }
-       }
-
-       if (sc->encode_element && sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst) {
-               encode_sink = sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst;
-               encode_pipeline = sc->encode_element[_MMCAMCORDER_ENCODE_MAIN_PIPE].gst;
-
-               _mmcam_dbg_log("file location set.[%s], current encode sink [%s]",
-                       filename, GST_OBJECT_NAME(gst_element_get_factory(encode_sink)));
-
-               /* check whether it's filesink or not */
-               if (strncmp(GST_OBJECT_NAME(gst_element_get_factory(encode_sink)), "filesink", strlen("filesink"))) {
-                       _mmcam_dbg_log("remove current sink and create filesink");
-
-                       /* remove fakesink and create/add filesink to encode pipeline */
-                       /* set NULL state */
-                       ret = _mmcamcorder_gst_set_state(handle, encode_sink, GST_STATE_NULL);
-                       if (ret != MM_ERROR_NONE) {
-                               _mmcam_dbg_err("failed to set NULL encoder sink");
-                               return FALSE;
-                       }
-
-                       /* remove encode sink - pads will be unlinked automatically in remove function */
-                       if (!gst_bin_remove(GST_BIN(encode_pipeline), encode_sink)) {
-                               _mmcam_dbg_err("failed to remove encode sink from pipeline");
-                               return FALSE;
-                       }
-
-                       _mmcam_dbg_log("remove done");
-
-                       /* create filesink */
-                       encode_sink = gst_element_factory_make("filesink", NULL);
-                       if (!encode_sink) {
-                               _mmcam_dbg_err("filesink creation failed");
-                               return FALSE;
-                       }
-
-                       sc->encode_element[_MMCAMCORDER_ENCSINK_SINK].gst = encode_sink;
-
-                       /* set release notification callback */
-                       g_object_weak_ref(G_OBJECT(encode_sink), (GWeakNotify)_mmcamcorder_element_release_noti, sc);
-
-                       /* add to pipeline */
-                       if (!gst_bin_add(GST_BIN(encode_pipeline), encode_sink)) {
-                               _mmcam_dbg_err("failed to add filesink to encode pipeline");
-                               gst_object_unref(encode_sink);
-                               return FALSE;
-                       }
-
-                       /* link filesink */
-                       if (sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst) {
-                               /* mux element is used */
-                               _mmcam_dbg_log("Link mux to encode_sink");
-                               encode_link = sc->encode_element[_MMCAMCORDER_ENCSINK_MUX].gst;
-                       } else {
-                               /* no mux element */
-                               _mmcam_dbg_log("Link audio encoder to encode_sink");
-                               encode_link = sc->encode_element[_MMCAMCORDER_ENCSINK_AENC].gst;
-                       }
-
-                       if (!_MM_GST_ELEMENT_LINK(encode_link, encode_sink)) {
-                               _mmcam_dbg_err("Link FAILED");
-                               return FALSE;
-                       }
-
-                       _mmcam_dbg_log("Link OK");
-               }
-
-               MMCAMCORDER_G_OBJECT_SET_POINTER(encode_sink, "location", filename);
-       } else {
-               _mmcam_dbg_log("element is not created yet. [%s] will be set later...", filename);
-       }
+       _mmcam_dbg_log("set filename [%s]", filename);
 
        return TRUE;
 }
@@ -3809,7 +3729,7 @@ bool _mmcamcorder_commit_display_handle(MMHandleType handle, int attr_idx, const
                } else if (!strcmp(videosink_name, "evasimagesink") || !strcmp(videosink_name, "evaspixmapsink")) {
                        _mmcam_dbg_log("Commit : Set evas object [%p]", p_handle);
                        MMCAMCORDER_G_OBJECT_SET_POINTER(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "evas-object", p_handle);
-               } else if (!strcmp(videosink_name, "waylandsink")) {
+               } else if (!strcmp(videosink_name, "tizenwlsink")) {
                        MMCamWaylandInfo *wl_info = (MMCamWaylandInfo *)p_handle;
 
                        _mmcam_dbg_log("wayland global surface id : %d", wl_info->global_surface_id);
@@ -3863,7 +3783,7 @@ bool _mmcamcorder_commit_display_mode(MMHandleType handle, int attr_idx, const m
 
        _mmcam_dbg_log("Commit : videosinkname[%s]", videosink_name);
 
-       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "waylandsink")) {
+       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "tizenwlsink")) {
                _mmcam_dbg_log("Commit : display mode [%d]", value->value.i_val);
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "display-mode", value->value.i_val);
        } else {
@@ -3956,7 +3876,7 @@ bool _mmcamcorder_commit_display_visible(MMHandleType handle, int attr_idx, cons
                return FALSE;
        }
 
-       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "waylandsink") ||
+       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "tizenwlsink") ||
                !strcmp(videosink_name, "evaspixmapsink") || !strcmp(videosink_name, "evasimagesink")) {
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "visible", value->value.i_val);
                _mmcam_dbg_log("Set visible [%d] done.", value->value.i_val);
@@ -4001,7 +3921,7 @@ bool _mmcamcorder_commit_display_geometry_method(MMHandleType handle, int attr_i
                return FALSE;
        }
 
-       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "waylandsink") ||
+       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "tizenwlsink") ||
            !strcmp(videosink_name, "evaspixmapsink") || !strcmp(videosink_name, "evasimagesink")) {
                method = value->value.i_val;
                MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "display-geometry-method", method);
@@ -4056,7 +3976,7 @@ bool _mmcamcorder_commit_display_rect(MMHandleType handle, int attr_idx, const m
                return FALSE;
        }
 
-       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "waylandsink") ||
+       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "tizenwlsink") ||
            !strcmp(videosink_name, "evaspixmapsink")) {
                int rect_x = 0;
                int rect_y = 0;
@@ -4110,7 +4030,7 @@ bool _mmcamcorder_commit_display_rect(MMHandleType handle, int attr_idx, const m
                if (!(flags & MM_ATTRS_FLAG_MODIFIED)) {
                        _mmcam_dbg_log("RECT(x,y,w,h) = (%d,%d,%d,%d)", rect_x, rect_y, rect_width, rect_height);
 
-                       if (!strcmp(videosink_name, "waylandsink")) {
+                       if (!strcmp(videosink_name, "tizenwlsink")) {
                            ret = gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst),
                                        rect_x, rect_y, rect_width, rect_height);
                                if (!ret) {
@@ -4169,7 +4089,7 @@ bool _mmcamcorder_commit_display_scale(MMHandleType handle, int attr_idx, const
        }
 
        zoom = value->value.i_val;
-       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "waylandsink")) {
+       if (!strcmp(videosink_name, "xvimagesink") || !strcmp(videosink_name, "tizenwlsink")) {
                vs_element = sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst;
 
                MMCAMCORDER_G_OBJECT_SET(vs_element, "zoom", (float)(zoom + 1));
@@ -4604,7 +4524,7 @@ bool _mmcamcorder_commit_pid_for_sound_focus(MMHandleType handle, int attr_idx,
 
        new_pid = value->value.i_val;
 
-       _mmcam_dbg_log("Commit : pid %d, current focus id %d, subscribe id %u",
+       _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 */
@@ -4626,6 +4546,17 @@ bool _mmcamcorder_commit_pid_for_sound_focus(MMHandleType handle, int attr_idx,
                        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");
@@ -4682,13 +4613,6 @@ bool _mmcamcorder_commit_sound_stream_info(MMHandleType handle, int attr_idx, co
                return FALSE;
        }
 
-       sc = MMF_CAMCORDER_SUBCONTEXT(handle);
-       if (!sc || !sc->encode_element ||
-           !sc->encode_element[_MMCAMCORDER_AUDIOSRC_SRC].gst) {
-               _mmcam_dbg_log("audiosrc element is not initialized, it will be set later");
-               return TRUE;
-       }
-
        mm_camcorder_get_attributes(handle, NULL,
                MMCAM_SOUND_STREAM_INDEX, &stream_index,
                NULL);
@@ -4697,7 +4621,17 @@ bool _mmcamcorder_commit_sound_stream_info(MMHandleType handle, int attr_idx, co
                return FALSE;
        }
 
-       _mmcam_dbg_log("Commit : sound stream info - type %s, index %d", stream_type, stream_index);
+       /* 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) {
+               _mmcam_dbg_warn("audiosrc element is not initialized, it will be set later");
+               return TRUE;
+       }
+
+       _mmcam_dbg_warn("Commit : sound stream info - type %s, index %d", stream_type, stream_index);
 
        return _mmcamcorder_set_sound_stream_info(sc->encode_element[_MMCAMCORDER_AUDIOSRC_SRC].gst, stream_type, stream_index);
 }