return TRUE;
}
+static GstElement *
+__mmplayer_gst_find_child_element(GstBin *bin, const gchar *element_name)
+{
+ GstIterator *iter = NULL;
+ GValue item = {0, };
+ GstElement *ch_element = NULL;
+ GstElementFactory *ch_factory = NULL;
+
+ MMPLAYER_FENTER();
+ MMPLAYER_RETURN_VAL_IF_FAIL(bin && element_name, NULL);
+
+ iter = gst_bin_iterate_recurse(bin);
+ if (iter != NULL) {
+ while (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) {
+ ch_element = g_value_get_object(&item);
+ ch_factory = gst_element_get_factory(ch_element);
+ LOGD("children factory %s", GST_OBJECT_NAME(ch_factory));
+ if (g_strrstr(GST_OBJECT_NAME(ch_factory), element_name)) {
+ LOGD("Find %s element", element_name);
+ break;
+ }
+ ch_element = NULL;
+ g_value_reset(&item);
+ }
+ gst_iterator_free(iter);
+ }
+
+ MMPLAYER_FLEAVE();
+ return ch_element;
+}
+
static void
__mmplayer_gst_deep_element_added(GstElement *bin, GstBin *child, GstElement *element, gpointer data)
{
(guint64)dur_bytes); /* no meaning at the moment */
return;
}
+ }
- /* update mq setting */
- if (g_strrstr(factory_name, "parsebin") && (!mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].gst)) {
- GstIterator *iter = NULL;
- GValue item = {0, };
- GstElement *ch_element = NULL;
- GstElementFactory *ch_factory = NULL;
-
- iter = gst_bin_iterate_recurse(child);
- if (iter != NULL) {
- while (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) {
- ch_element = g_value_get_object(&item);
- ch_factory = gst_element_get_factory(ch_element);
- LOGD("children factory %s", GST_OBJECT_NAME(ch_factory));
- if (g_strrstr(GST_OBJECT_NAME(ch_factory), "multiqueue")) {
- LOGD("get multiqueue");
- player->pipeline->mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].id = MMPLAYER_M_DEMUXED_S_BUFFER;
- player->pipeline->mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].gst = ch_element;
-
- /* in case of multiqueue, max bytes size is defined with fixed value in mm_player_streaming.h */
- _mm_player_streaming_set_multiqueue(player->streamer, ch_element);
- g_value_reset(&item);
- break;
- }
- g_value_reset(&item);
+ if (g_strrstr(factory_name, "parsebin")) {
+ if ((!MMPLAYER_IS_RTSP_STREAMING(player)) && (!mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].gst)) {
+ GstElement *ch_element = __mmplayer_gst_find_child_element(child, "multiqueue");
+ if (ch_element) {
+ player->pipeline->mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].id = MMPLAYER_M_DEMUXED_S_BUFFER;
+ player->pipeline->mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].gst = ch_element;
+
+ /* in case of multiqueue, max bytes size is defined with fixed value in mm_player_streaming.h */
+ if (MMPLAYER_IS_STREAMING(player)) {
+ _mm_player_streaming_set_multiqueue(player->streamer, ch_element);
+ } else {
+ g_object_set(G_OBJECT(ch_element),
+ "max-size-time", (guint64)(5 * GST_SECOND),
+ "use-interleave", FALSE, NULL);
}
- gst_iterator_free(iter);
}
}
- }
-
- if (g_strrstr(factory_name, "parsebin")) {
int video_codec_type = 0;
int audio_codec_type = 0;