Issues handling bin's
Tim-Philipp Müller
t.i.m at zen.co.uk
Sun Sep 29 01:55:07 PDT 2013
Did you add a ghost pad to the bin (or two if data comes out again as well) ?
What step actually fails? Some link? Where?
Cheers
-Tim
----- Original message -----
> Hi,
>
>
>
> I've a small issue to handling bin in my C-Source.
>
> If I use a pipe like this:
>
>
>
> tv_pipe = gst_pipeline_new ("TV-Stream");
>
> if(!tv_pipe) g_printerr("TV-Stream-Pipeline not created\n");
>
>
>
> tv_source = gst_element_factory_make ("tcpclientsrc", "tv-source");
>
> if(!tv_source) g_printerr("TV-Source not created\n");
>
>
>
> tv_mux = gst_element_factory_make ("tsdemux", "tv-mux");
>
> if(!tv_mux) g_printerr("TV-Mux not created\n");
>
>
>
> tv_v_queue = gst_element_factory_make ("queue", "tv-v-queue");
>
> if(!tv_v_queue) g_printerr("TV-Video-Queue not created\n");
>
>
>
> tv_v_parse = gst_element_factory_make ("mpegvideoparse",
> "Video-Parse");
>
> if(!tv_v_parse) g_printerr("Video-Parse not created\n");
>
>
>
> tv_v_dec = gst_element_factory_make ("mpeg2dec", "tv-v-dec");
>
> if(!tv_v_dec) g_printerr("TV-Video-Dec not created\n");
>
>
>
> tv_v_sink = gst_element_factory_make ("xvimagesink", "tv-v-sink");
>
> if(!tv_v_sink) g_printerr("TV-Video-Sink not created\n");
>
>
>
> tv_a_queue = gst_element_factory_make ("queue", "tv-a-queue");
>
> if(!tv_a_queue) g_printerr("TV-Audio-Queue not created\n");
>
>
>
> tv_a_parse = gst_element_factory_make ("mpegaudioparse",
> "Audio-Parse");
>
> if(!tv_a_parse) g_printerr("Audio-Parse not created\n");
>
>
>
> tv_a_dec = gst_element_factory_make ("mad", "tv-a-dec");
>
> if(!tv_a_dec) g_printerr("TV-Audio-Dec not created\n");
>
>
>
> tv_a_sink = gst_element_factory_make ("pulsesink", "tv-a-sink");
>
> if(!tv_a_sink) g_printerr("TV-Audio-Sink not created\n");
>
>
>
>
>
> tv_bus = gst_pipeline_get_bus (GST_PIPELINE (tv_pipe));
>
> gst_bus_add_watch (tv_bus, tv_bus_call, NULL);
>
> gst_bus_set_sync_handler (tv_bus, (GstBusSyncHandler) bus_sync_handler,
> NULL, NULL);
>
> gst_object_unref (tv_bus);
>
>
>
>
>
> gst_bin_add_many (GST_BIN (tv_pipe), tv_source, tv_mux, tv_v_queue,
> tv_v_parse, tv_v_dec, tv_v_sink, tv_a_queue, tv_a_parse, tv_a_dec,
> tv_a_sink, NULL);
>
>
>
>
>
> gst_element_link (tv_source, tv_mux);
>
> gst_element_link_many (tv_v_queue, tv_v_parse, tv_v_dec, tv_v_sink,
> NULL);
>
> gst_element_link_many (tv_a_queue, tv_a_parse, tv_a_dec, tv_a_sink,
> NULL);
>
>
>
>
>
> g_signal_connect (tv_mux, "pad-added", G_CALLBACK (tv_mux_pad_added),
> tv_v_queue);
>
>
>
> return 1;
>
> }
>
>
>
> There it's working fine.
>
> But if I change it to:
>
>
>
> (Beginning the same)
>
> ..
>
>
>
> sdh_bin = gst_bin_new("sdh_bin");
>
> if(!sdh_bin) g_printerr("sdh_bin not created\n");
>
>
>
>
>
> gst_bin_add_many (GST_BIN (sdh_bin), tv_v_queue, tv_v_parse, tv_v_dec,
> tv_v_sink, NULL);
>
> gst_bin_add_many (GST_BIN (tv_pipe), tv_source, tv_mux, sdh_bin,
> tv_a_queue, tv_a_parse, tv_a_dec, tv_a_sink, NULL);
>
>
>
> ..
>
> (Rest the same)
>
>
>
> It doesn't work (no audio/video).
>
> Do I have some misunderstandings? I've read the documentation regarding
> 'bin's'.
>
>
>
> Thanks' for helping
>
> Bernhard
>
>
>
>
>
More information about the gstreamer-devel
mailing list