fakesink = gst_element_factory_make("fakesink", NULL);
if (fakesink == NULL) {
LOGE("failed to create fakesink");
- goto EXIT;
+ return;
}
- /* store it as it's sink element */
- __mmplayer_add_sink(player, fakesink, FALSE);
-
- gst_bin_add(GST_BIN(pipeline), fakesink);
+ if (!gst_bin_add(GST_BIN(pipeline), fakesink)) {
+ LOGE("failed to add fakesink to pipeline");
+ goto ERROR;
+ }
/* link */
sinkpad = gst_element_get_static_pad(fakesink, "sink");
if (gst_pad_link(pad, sinkpad) != GST_PAD_LINK_OK) {
LOGE("failed to link fakesink");
- gst_object_unref(GST_OBJECT(fakesink));
- goto EXIT;
+ goto ERROR;
}
if (strstr(name, "video")) {
g_object_set(G_OBJECT(fakesink), "sync", TRUE, NULL);
gst_element_set_state(fakesink, GST_STATE_PAUSED);
-EXIT:
+ /* store it as it's sink element */
+ __mmplayer_add_sink(player, fakesink, FALSE);
+
if (sinkpad)
gst_object_unref(GST_OBJECT(sinkpad));
MMPLAYER_FLEAVE();
return;
+
+ERROR:
+
+ if (sinkpad)
+ gst_object_unref(GST_OBJECT(sinkpad));
+
+ if (fakesink) {
+ gst_element_set_state(fakesink, GST_STATE_NULL);
+
+ if (!gst_bin_remove(GST_BIN(pipeline), fakesink))
+ gst_object_unref(GST_OBJECT(fakesink));
+ }
+
+ return;
}
static GstElement *
return NULL;
}
+ gst_element_set_state(concat, GST_STATE_PAUSED);
+
+ pipeline = player->pipeline->mainbin[MMPLAYER_M_PIPE].gst;
+ if (!gst_bin_add(GST_BIN(pipeline), concat)) {
+ LOGE("failed to add concat to pipeline");
+ gst_element_set_state(concat, GST_STATE_NULL);
+ gst_object_unref(GST_OBJECT(concat));
+ return NULL;
+ }
+
LOGD("Create concat [%d] element", elem_idx);
player->pipeline->mainbin[elem_idx].id = elem_idx;
player->pipeline->mainbin[elem_idx].gst = concat;
- gst_element_set_state(concat, GST_STATE_PAUSED);
-
- pipeline = player->pipeline->mainbin[MMPLAYER_M_PIPE].gst;
- gst_bin_add(GST_BIN(pipeline), concat);
-
MMPLAYER_FLEAVE();
return concat;
}
}
g_object_set(selector, "sync-streams", TRUE, NULL);
- player->pipeline->mainbin[elem_idx].id = elem_idx;
- player->pipeline->mainbin[elem_idx].gst = selector;
-
- /* player->track[stream_type].active_track_index = DEFAULT_TRACK; */
-
srcpad = gst_element_get_static_pad(selector, "src");
LOGD("blocking %s:%s", GST_DEBUG_PAD_NAME(srcpad));
gst_element_set_state(selector, GST_STATE_PAUSED);
pipeline = player->pipeline->mainbin[MMPLAYER_M_PIPE].gst;
- gst_bin_add(GST_BIN(pipeline), selector);
+ if (!gst_bin_add(GST_BIN(pipeline), selector)) {
+ LOGE("failed to add selector to pipeline");
+
+ if (player->track[stream_type].block_id != 0)
+ gst_pad_remove_probe (srcpad, player->track[stream_type].block_id);
+ player->track[stream_type].block_id = 0;
+
+ if (player->track[stream_type].event_probe_id != 0)
+ gst_pad_remove_probe (srcpad, player->track[stream_type].event_probe_id);
+ player->track[stream_type].event_probe_id = 0;
+
+ gst_object_unref(GST_OBJECT(srcpad));
+
+ gst_element_set_state(selector, GST_STATE_NULL);
+ gst_object_unref(GST_OBJECT(selector));
+ return NULL;
+ }
gst_object_unref(GST_OBJECT(srcpad));
+ player->pipeline->mainbin[elem_idx].id = elem_idx;
+ player->pipeline->mainbin[elem_idx].gst = selector;
+
MMPLAYER_FLEAVE();
return selector;
}