mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 16:50:47 +00:00
08eaa11259
Original commit message from CVS: - added playondemand plugin by Leif Morgan Johnson <lmjohns3@eos.ncsu.edu> - some fixes to int2float - aplied a patch from wrobell <wrobell@ite.pl> that is a first attempt at making automake 1.5 happy (gst now requires automake1.5). It's still not perfect but it builds. - Made the schedulers plugable. The default scheduler now lives inside a plugin. - Added a new mpeg1/2 parser/demuxer. - Fixed some compiler warnings in the core libs. - substantial work to GstThread (hopefully less race conditions). simplified the code in GstThread a bit. A state change can now also happen in the thread context. - reworked the state semantics of a bin. it'll now automatically get the highest state of its children. - the autoplugger now nests the threads so that a state change failure of one thread doesn't make its upstream thread lock. - GstQueue refuses to go to PLAYING if the sinkpad is not connected. This way the queue will not wedge in the _get lock. - GstQueue unlocks its mutexes when going to PAUSED. - make sure that when all elements in a bin/thread go to PAUSED, the bin is set to PAUSED too. - make a parent bin wait for its children to PAUSE before ending the iteration with FALSE (EOS) - Some changes to GstPlay to deal with EOS. - aplied the latest patch from Zeenix to gstrtp. end result: GstPlay doesn't crash on EOS and the pipeline is now shut down properly.
79 lines
2.4 KiB
C
79 lines
2.4 KiB
C
#include <string.h>
|
|
#include <gst/gst.h>
|
|
|
|
GstElement *audiothread;
|
|
GstElement *audioqueue;
|
|
GstElement *audiodecode;
|
|
GstElement *audiosink;
|
|
|
|
void new_pad(GstElement *parse,GstPad *pad,GstElement *pipeline) {
|
|
|
|
if (!strncmp(gst_pad_get_name(pad), "audio_", 6)) {
|
|
fprintf(stderr,"have audio pad\n");
|
|
|
|
fprintf(stderr,"creating thread\n");
|
|
audiothread = gst_elementfactory_make("thread","audiothread");
|
|
gst_bin_add(GST_BIN(pipeline),audiothread);
|
|
|
|
fprintf(stderr,"creating queue\n");
|
|
audioqueue = gst_elementfactory_make("queue","audioqueue");
|
|
gst_bin_add(GST_BIN(audiothread),audioqueue);
|
|
gst_pad_connect(pad,gst_element_get_pad(audioqueue,"sink"));
|
|
|
|
fprintf(stderr,"creating decoder\n");
|
|
audiodecode = gst_elementfactory_make("mad","audiodecode");
|
|
gst_bin_add(GST_BIN(audiothread),audiodecode);
|
|
gst_element_connect(audioqueue,"src",audiodecode,"sink");
|
|
|
|
fprintf(stderr,"creating esdsink\n");
|
|
audiosink = gst_elementfactory_make("osssink","audiosink");
|
|
gst_bin_add(GST_BIN(audiothread),audiosink);
|
|
gst_element_connect(audiodecode,"src",audiosink,"sink");
|
|
|
|
fprintf(stderr,"setting state to PLAYING\n");
|
|
gst_element_set_state(audiothread,GST_STATE_PLAYING);
|
|
|
|
fprintf(stderr,"done dealing with new audio pad\n");
|
|
}
|
|
}
|
|
|
|
int main(int argc,char *argv[]) {
|
|
GstElement *pipeline, *sourcethread, *src, *parse;
|
|
//int i;
|
|
|
|
gst_init(&argc,&argv);
|
|
|
|
pipeline = gst_pipeline_new("pipeline");
|
|
sourcethread = gst_elementfactory_make("thread","sourcethread");
|
|
src = gst_elementfactory_make("disksrc","src");
|
|
g_object_set(G_OBJECT(src),"location","/home/omega/media/AlienSong.mpg",NULL);
|
|
parse = gst_elementfactory_make("mpeg1parse","parse");
|
|
|
|
g_signal_connect(G_OBJECT(parse),"new_pad",
|
|
G_CALLBACK(new_pad),pipeline);
|
|
|
|
gst_bin_add(GST_BIN(sourcethread),src);
|
|
gst_bin_add(GST_BIN(sourcethread),parse);
|
|
|
|
gst_element_connect(src,"src",parse,"sink");
|
|
|
|
gst_bin_add(GST_BIN(pipeline),sourcethread);
|
|
|
|
gst_scheduler_show(GST_ELEMENT_SCHED(pipeline));
|
|
|
|
gst_element_set_state(pipeline,GST_STATE_PLAYING);
|
|
sleep(1);
|
|
|
|
while (1) {
|
|
// sleep(1);
|
|
fprintf(stderr,"setting to PAUSED\n");
|
|
gst_element_set_state(pipeline,GST_STATE_PAUSED);fprintf(stderr,"paused... ");
|
|
// sleep(1);
|
|
fprintf(stderr,"setting to PLAYING\n");
|
|
gst_element_set_state(pipeline,GST_STATE_PLAYING);fprintf(stderr,"playing.\n");
|
|
}
|
|
|
|
// for (i=0;i<10;i++)
|
|
// while (1)
|
|
// gst_bin_iterate(GST_BIN(pipeline));
|
|
}
|