| OUTDATED, methods have different names now |
| ------------------------------------------ |
| |
| |
| Here's a pipeline that does audio/video MPEG streams with a queue on |
| either side of each decompressor, for a total of 5 threads (read/split, |
| decode audio, decode video, play audio, play video): |
| |
| NOTES: mpegsplit is the intelligence in this pipeline, providing an IDL |
| that allows one to connect things to a GUI. |
| |
| Pipeline(mpegplay) |
| Thread(reader) |
| Element(:disk_async_src) [StreamerAsyncSrc] |
| OutPad(disk1) |
| Element(:mpegsplit) |
| InPad(disk1) |
| OutPad(audio1) |
| OutPad(video1) |
| |
| Queue(audioQ1) |
| InPad(audio1) |
| OutPad(audio2) |
| Thread(audiodecode) |
| Element(:mpeg_audio_decode) [StreamerVideoFilter] |
| InPad(audio2) |
| OutPad(audio3) |
| Queue(audioQ2) |
| InPad(audio3) |
| OutPad(audio4) |
| Thread(audioplay) |
| Element(:audio_play) [StreamerAudioSink] |
| InPad(audio4) |
| |
| Queue(videoQ1) |
| InPad(video1) |
| OutPad(video2) |
| Thread(videodecode) |
| Element(:mpeg_video_decode) [StreamerVideoFilter] |
| InPad(video2) |
| OutPad(video3) |
| Queue(videoQ2) |
| InPad(video3) |
| OutPad(video4) |
| Thread(videoplay) |
| Element(:video_play) [StreamerVideoSink] |
| InPad(video4) |
| |
| |
| A simpler pipeline that just does MPEG videos: |
| |
| Pipeline(mpegplay) |
| Thread(reader) |
| Element(:disk_async_src) [GstAsyncSrc] |
| OutPad(disk1) |
| Element(:mpeg_control) |
| InPad(disk1) |
| OutPad(video1) |
| Element(:mpeg_video_decode) [GstVideoFilter] |
| InPad(video1) |
| InPad(video2) |
| Queue(queue) |
| InPad(video2) |
| OutPad(video3) |
| Thread(play) |
| Element(:video_play) [GstVideoSink] |
| InPad(video3) |
| |
| The code for the above looks roughly like: |
| |
| /* all the objects we're worried about */ |
| GstPipeline *mpegplay; |
| GstThread *reader; |
| GstSrc *disk_src; |
| GstControl *mpeg_control; |
| GstFilter *mpeg_video_decode; |
| GstQueue *queue; |
| GstThread *play; |
| GstSink *video_play; |
| |
| /*** first we create all of the objects ***/ |
| |
| mpegplay = gst_pipeline_new(); |
| reader = gst_thread_new(); |
| disk_src = gst_async_disk_src_new("filename.mpg"); |
| mpeg_control = gst_mpeg_control_new(); |
| mpeg_video_decode = gst_mpeg_video_decode_new(); |
| queue = gst_queue_new(); |
| play = gst_thread_new(); |
| video_play = gst_video_sink_new(); |
| |
| |
| /*** now we start to create the pipeline ***/ |
| |
| /* first set up the reader thread */ |
| gst_bin_add(reader,disk_src); |
| gst_object_connect(disk_src,"out",mpeg_control,"in"); |
| gst_object_connect(mpeg_control,"out",mpeg_audio_decode,"in"); |
| gst_bin_ghost_pad(reader,mpeg_audio_decode,"out"); |
| |
| /* then set up the player thread */ |
| gst_bin_add(play,audio_play); |
| gst_bin_ghost_pad(play,audio_play,"in"); |
| |
| /* now plug them all into the main pipeline */ |
| gst_bin_add(mp3play,reader); |
| gst_object_connect(reader,"out",queue,"in"); |
| gst_object_connect(queue,"out",play,"in"); |