- 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);
- }