[gst-devel] problem linking audio elements dynamically
danielkun at iremo.com
danielkun at iremo.com
Tue Mar 25 04:35:02 CET 2008
Hello,
I am still new to Gstreamer but I'm quite pleased to have managed to
build my first MPEG video player.
I'm having problems with the dynamic audio linking though. I added a
callback to my demuxer where I would like to load the appropriate audio
decoder based on the type. (MPEG1L2 / AC-3)
It works perfectly if I link my elements before I start the pipeline,
but when I try to link my audio objects in the demuxer callback, the
movie is played a few frames and then stops.
Is my understanding of how the dynamic linking works wrong or have I
missed anything?
I'd appreciate any help.
Daniel
Here's my demuxer callback:
static void
new_pad (GstElement *element, GstPad *pad, gpointer data)
{
GstCaps *caps;
gchar *name;
gchar *type;
caps = gst_pad_get_caps (pad);
name = gst_pad_get_name (pad);
type = gst_caps_to_string (caps);
// VIDEO
if ( NULL != strstr(name, "video"))
{
GstPad *sinkpad;
sinkpad = gst_element_get_pad (queue_video, "sink");
gst_pad_link (pad, sinkpad);
gst_object_unref (sinkpad);
}
// AUDIO
if ( NULL != strstr(name, "audio"))
{
GstPad *sinkpad;
if (0 == strncmp("audio/x-ac3", type, strlen("audio/x-ac3")))
{
g_print("AC-3 AUDIO\n");
decoder_audio = gst_element_factory_make ("a52dec", NULL);
}
else if (0 == strncmp("audio/mpeg", type, strlen("audio/mpeg")))
{
g_print("MPEG AUDIO\n");
decoder_audio = gst_element_factory_make ("mad", NULL);
}
gst_bin_add_many (GST_BIN (pipeline), queue_audio, decoder_audio,
convert_audio, sink_audio, NULL);
gst_element_link_many (queue_audio, decoder_audio, convert_audio,
sink_audio, NULL);
sinkpad = gst_element_get_pad (queue_audio, "sink");
gst_pad_link (pad, sinkpad);
gst_object_unref (sinkpad);
}
}
More information about the gstreamer-devel
mailing list