diff options
Diffstat (limited to 'examples/seeking/seek.c')
-rw-r--r-- | examples/seeking/seek.c | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/examples/seeking/seek.c b/examples/seeking/seek.c index f171d0c1..4ba2f34c 100644 --- a/examples/seeking/seek.c +++ b/examples/seeking/seek.c @@ -20,7 +20,7 @@ static guint update_id; static gulong changed_id; //#define SOURCE "gnomevfssrc" -#define SOURCE "filesrc" +#define SOURCE "gnomevfssrc" #define UPDATE_INTERVAL 500 @@ -422,6 +422,71 @@ make_vorbis_theora_pipeline (const gchar * location) } static GstElement * +make_avi_msmpeg4v3_mp3_pipeline (const gchar * location) +{ + GstElement *pipeline, *audio_bin, *video_bin; + GstElement *src, *demux, *a_decoder, *a_convert, *v_decoder, *v_convert; + GstElement *audiosink, *videosink; + GstElement *a_queue, *v_queue; + GstPad *seekable; + + pipeline = gst_pipeline_new ("app"); + + src = gst_element_factory_make_or_warn (SOURCE, "src"); + g_object_set (G_OBJECT (src), "location", location, NULL); + + demux = gst_element_factory_make_or_warn ("avidemux", "demux"); + + gst_bin_add (GST_BIN (pipeline), src); + gst_bin_add (GST_BIN (pipeline), demux); + gst_element_link (src, demux); + + audio_bin = gst_bin_new ("a_decoder_bin"); + a_queue = gst_element_factory_make_or_warn ("queue", "a_queue"); + a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec"); + a_convert = gst_element_factory_make_or_warn ("audioconvert", "a_convert"); + audiosink = gst_element_factory_make_or_warn ("osssink", "a_sink"); + + gst_element_link (a_queue, a_decoder); + gst_element_link (a_decoder, a_convert); + gst_element_link (a_convert, audiosink); + + gst_bin_add (GST_BIN (audio_bin), a_queue); + gst_bin_add (GST_BIN (audio_bin), a_decoder); + gst_bin_add (GST_BIN (audio_bin), a_convert); + gst_bin_add (GST_BIN (audio_bin), audiosink); + + gst_bin_add (GST_BIN (pipeline), audio_bin); + + setup_dynamic_link (demux, NULL, gst_element_get_pad (a_queue, "sink"), NULL); + + video_bin = gst_bin_new ("v_decoder_bin"); + v_queue = gst_element_factory_make_or_warn ("queue", "v_queue"); + v_decoder = gst_element_factory_make_or_warn ("ffdec_msmpeg4", "v_dec"); + v_convert = + gst_element_factory_make_or_warn ("ffmpegcolorspace", "v_convert"); + videosink = gst_element_factory_make_or_warn ("xvimagesink", "v_sink"); + gst_element_link_many (v_queue, v_decoder, v_convert, videosink, NULL); + + gst_bin_add (GST_BIN (video_bin), v_queue); + gst_bin_add (GST_BIN (video_bin), v_decoder); + gst_bin_add (GST_BIN (video_bin), v_convert); + gst_bin_add (GST_BIN (video_bin), videosink); + + gst_bin_add (GST_BIN (pipeline), video_bin); + + setup_dynamic_link (demux, NULL, gst_element_get_pad (v_queue, "sink"), NULL); + + seekable = gst_element_get_pad (a_decoder, "src"); + seekable_pads = g_list_prepend (seekable_pads, seekable); + rate_pads = g_list_prepend (rate_pads, seekable); + rate_pads = + g_list_prepend (rate_pads, gst_element_get_pad (a_decoder, "sink")); + + return pipeline; +} + +static GstElement * make_mp3_pipeline (const gchar * location) { GstElement *pipeline; @@ -1043,6 +1108,7 @@ static Pipeline pipelines[] = { {"vorbis", make_vorbis_pipeline}, {"theora", make_theora_pipeline}, {"ogg/v/t", make_vorbis_theora_pipeline}, + {"avi/msmpeg4v3/mp3", make_avi_msmpeg4v3_mp3_pipeline}, {"sid", make_sid_pipeline}, {"flac", make_flac_pipeline}, {"wav", make_wav_pipeline}, |