mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 19:20:35 +00:00
64a740ad9b
Original commit message from CVS: Move a step closer to autoplugging. The element selection in the pipeline works. Slight modification to the typefind function handling. removed the stupid mime types in the mpeg decoders. Adjust videosink for the new caps handling. Modified the queue example to show an error in plan creation; Erik can you solve this? This is the type of pipelines autoplugging uses.
86 lines
2.3 KiB
C
86 lines
2.3 KiB
C
#include <gst/gst.h>
|
|
|
|
gboolean playing;
|
|
|
|
/* eos will be called when the src element has an end of stream */
|
|
void eos(GstSrc *src, gpointer data)
|
|
{
|
|
g_print("have eos, quitting\n");
|
|
|
|
playing = FALSE;
|
|
}
|
|
|
|
int main(int argc,char *argv[])
|
|
{
|
|
GstElement *disksrc, *audiosink, *parse, *decode, *queue;
|
|
GstElement *bin;
|
|
GstElement *thread;
|
|
|
|
if (argc != 2) {
|
|
g_print("usage: %s <filename>\n", argv[0]);
|
|
exit(-1);
|
|
}
|
|
|
|
gst_init(&argc,&argv);
|
|
|
|
/* create a new thread to hold the elements */
|
|
thread = gst_thread_new("thread");
|
|
g_assert(thread != NULL);
|
|
|
|
/* create a new bin to hold the elements */
|
|
bin = gst_bin_new("bin");
|
|
g_assert(bin != NULL);
|
|
|
|
/* create a disk reader */
|
|
disksrc = gst_elementfactory_make("disksrc", "disk_source");
|
|
g_assert(disksrc != NULL);
|
|
gtk_object_set(GTK_OBJECT(disksrc),"location", argv[1],NULL);
|
|
gtk_signal_connect(GTK_OBJECT(disksrc),"eos",
|
|
GTK_SIGNAL_FUNC(eos), thread);
|
|
|
|
parse = gst_elementfactory_make("mp3parse", "parse");
|
|
decode = gst_elementfactory_make("mpg123", "decode");
|
|
|
|
queue = gst_elementfactory_make("queue", "queue");
|
|
|
|
/* and an audio sink */
|
|
audiosink = gst_elementfactory_make("audiosink", "play_audio");
|
|
g_assert(audiosink != NULL);
|
|
|
|
gst_bin_use_cothreads (GST_BIN (bin), TRUE);
|
|
|
|
/* add objects to the main pipeline */
|
|
gst_bin_add(GST_BIN(bin), disksrc);
|
|
gst_bin_add(GST_BIN(bin), parse);
|
|
gst_bin_add(GST_BIN(bin), decode);
|
|
gst_bin_add(GST_BIN(bin), queue);
|
|
|
|
gst_bin_add(GST_BIN(thread), audiosink);
|
|
|
|
gst_bin_add(GST_BIN(bin), thread);
|
|
|
|
gst_pad_connect(gst_element_get_pad(disksrc,"src"),
|
|
gst_element_get_pad(parse,"sink"));
|
|
gst_pad_connect(gst_element_get_pad(parse,"src"),
|
|
gst_element_get_pad(decode,"sink"));
|
|
gst_pad_connect(gst_element_get_pad(decode,"src"),
|
|
gst_element_get_pad(queue,"sink"));
|
|
gst_pad_connect(gst_element_get_pad(queue,"src"),
|
|
gst_element_get_pad(audiosink,"sink"));
|
|
|
|
/* make it ready */
|
|
gst_element_set_state(GST_ELEMENT(bin), GST_STATE_READY);
|
|
/* start playing */
|
|
gst_element_set_state(GST_ELEMENT(bin), GST_STATE_PLAYING);
|
|
|
|
playing = TRUE;
|
|
|
|
while (playing) {
|
|
gst_bin_iterate(GST_BIN(bin));
|
|
}
|
|
|
|
gst_element_set_state(GST_ELEMENT(bin), GST_STATE_NULL);
|
|
|
|
exit(0);
|
|
}
|
|
|