- queue_audio = gst_element_factory_make("queue", "queue_audio");
- g_object_set (G_OBJECT (sink), "preroll-queue-len", 80, NULL);
- gst_bin_add_many (GST_BIN (m_gst_pipeline), source, queue_audio, conv, sink, NULL);
- gst_element_link_many(source, queue_audio, conv, sink, NULL);
- }
- else if ( sourceinfo.is_video )
- {
- char srt_filename[strlen(filename)+1];
- strncpy(srt_filename,filename,strlen(filename)-3);
- srt_filename[strlen(filename)-3]='\0';
- strcat(srt_filename, "srt");
- struct stat buffer;
- if (stat(srt_filename, &buffer) == 0)
- {
- eDebug("subtitle file found: %s",srt_filename);
- GstElement *subsource = gst_element_factory_make ("filesrc", "srt_source");
- g_object_set (G_OBJECT (subsource), "location", srt_filename, NULL);
- gst_bin_add(GST_BIN (m_gst_pipeline), subsource);
- GstPad *switchpad = gstCreateSubtitleSink(this, stSRT);
- gst_pad_link(gst_element_get_pad (subsource, "src"), switchpad);
- subtitleStream subs;
- subs.pad = switchpad;
- subs.type = stSRT;
- subs.language_code = std::string("und");
- m_subtitleStreams.push_back(subs);
- }
- gst_bin_add_many(GST_BIN(m_gst_pipeline), source, videodemux, audio, queue_audio, video, queue_video, switch_audio, NULL);
-
- if ( sourceinfo.containertype == ctVCD && gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"file-source") )
- {
- eDebug("this is a fake video cd... we use filesrc ! cdxaparse !");
- GstElement *cdxaparse = gst_element_factory_make("cdxaparse", "cdxaparse");
- gst_bin_add(GST_BIN(m_gst_pipeline), cdxaparse);
- gst_element_link(source, cdxaparse);
- gst_element_link(cdxaparse, videodemux);
- }
- else
- gst_element_link(source, videodemux);
-
- gst_element_link(switch_audio, queue_audio);
- gst_element_link(queue_audio, audio);
- gst_element_link(queue_video, video);
- g_signal_connect(videodemux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
-
- } else /* is audio*/
- {
- if ( decoder )
- {
- queue_audio = gst_element_factory_make("queue", "queue_audio");
-
- g_signal_connect (decoder, "new-decoded-pad", G_CALLBACK(gstCBnewPad), this);
- g_signal_connect (decoder, "unknown-type", G_CALLBACK(gstCBunknownType), this);
-
- g_object_set (G_OBJECT (sink), "preroll-queue-len", 80, NULL);
-
- /* gst_bin will take the 'floating references' */
- gst_bin_add_many (GST_BIN (m_gst_pipeline),
- source, queue_audio, decoder, NULL);
-
- /* in decodebin's case we can just connect the source with the decodebin, and decodebin will take care about id3demux (or whatever is required) */
- gst_element_link_many(source, queue_audio, decoder, NULL);
-
- /* create audio bin with the audioconverter, the capsfilter and the audiosink */
- audio = gst_bin_new ("audiobin");
-
- GstPad *audiopad = gst_element_get_static_pad (conv, "sink");
- gst_bin_add_many(GST_BIN(audio), conv, flt, sink, NULL);
- gst_element_link_many(conv, flt, sink, NULL);
- gst_element_add_pad(audio, gst_ghost_pad_new ("sink", audiopad));
- gst_object_unref(audiopad);
- gst_bin_add (GST_BIN(m_gst_pipeline), audio);
- }
- else
- {
- gst_bin_add_many (GST_BIN (m_gst_pipeline), source, sink, NULL);
- if ( parser && id3demux )
- {
- gst_bin_add_many (GST_BIN (m_gst_pipeline), parser, id3demux, NULL);
- gst_element_link(source, id3demux);
- g_signal_connect(id3demux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
- gst_element_link(parser, sink);
- }
- if ( audiodemux )
- {
- gst_bin_add (GST_BIN (m_gst_pipeline), audiodemux);
- g_signal_connect(audiodemux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
- gst_element_link(source, audiodemux);
- }
- audioStream audio;
- audio.type = sourceinfo.audiotype;
- m_audioStreams.push_back(audio);
- }