diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2004-12-29 11:04:27 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2004-12-29 11:04:27 +0000 |
commit | c64491635f04b7471bb419484747d55669013e10 (patch) | |
tree | d454895a826d5042bafda7627767df461d581bbf | |
parent | c092010fafd47e4928ae630c1b3962b588ad6652 (diff) | |
download | gstreamer-plugins-bad-c64491635f04b7471bb419484747d55669013e10.tar.gz |
Various plugin updates.
Original commit message from CVS:
Various plugin updates.
-rw-r--r-- | ChangeLog | 70 | ||||
-rw-r--r-- | examples/seeking/seek.c | 124 |
2 files changed, 122 insertions, 72 deletions
@@ -1,3 +1,73 @@ +2004-12-29 Wim Taymans <wim@fluendo.com> + + * examples/seeking/seek.c: (dynamic_link), (make_vorbis_pipeline), + (make_mp3_pipeline), (make_avi_pipeline), (make_mpeg_pipeline), + (make_mpegnt_pipeline), (update_scale), (stop_seek), (play_cb), + (pause_cb), (stop_cb), (main): + * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_convert_sink), + (gst_mad_convert_src), (gst_mad_src_query), (gst_mad_src_event), + (gst_mad_update_info), (gst_mad_sink_event), + (gst_mad_check_caps_reset), (gst_mad_chain): + * ext/ogg/README: + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_get_type), + (gst_ogg_pad_init), (gst_ogg_pad_formats), + (gst_ogg_pad_event_masks), (gst_ogg_pad_query_types), + (gst_ogg_pad_src_convert), (gst_ogg_pad_src_query), + (gst_ogg_pad_reset), (gst_ogg_pad_submit_packet), + (gst_ogg_pad_submit_page), (gst_ogg_chain_new), + (gst_ogg_chain_free), (gst_ogg_chain_new_stream), + (gst_ogg_chain_get_stream), (gst_ogg_chain_has_stream), + (gst_ogg_demux_base_init), (gst_ogg_demux_init), + (gst_ogg_demux_finalize), (gst_ogg_demux_handle_event), + (gst_ogg_demux_submit_buffer), (gst_ogg_demux_seek), + (gst_ogg_demux_get_data), (gst_ogg_demux_get_next_page), + (gst_ogg_demux_get_prev_page), + (gst_ogg_demux_bisect_forward_serialno), + (gst_ogg_demux_read_chain), (gst_ogg_demux_find_pad), + (gst_ogg_demux_find_chains), (gst_ogg_demux_chain), + (gst_ogg_demux_loop), (gst_ogg_demux_sink_activate), + (gst_ogg_demux_change_state), (gst_ogg_print): + * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init), + (gst_ogg_mux_init), (gst_ogg_mux_sinkconnect), + (gst_ogg_mux_next_buffer), (gst_ogg_mux_buffer_from_page), + (gst_ogg_mux_push_page), (gst_ogg_mux_send_headers), + (gst_ogg_mux_loop): + * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain): + * ext/theora/theoradec.c: (gst_theora_dec_init), + (theora_dec_sink_event), (theora_dec_chain): + * ext/theora/theoraenc.c: (gst_theora_enc_init), + (theora_enc_sink_setcaps), (theora_buffer_from_packet), + (theora_push_buffer), (theora_enc_sink_event), (theora_enc_chain): + * ext/vorbis/Makefile.am: + * ext/vorbis/vorbis.c: (plugin_init): + * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init), + (vorbis_dec_sink_event), (vorbis_dec_chain): + * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init), + (gst_vorbisenc_sink_setcaps), (gst_vorbisenc_init), + (gst_vorbisenc_push_buffer), (gst_vorbisenc_sink_event), + (gst_vorbisenc_chain): + * ext/vorbis/vorbisparse.c: (vorbis_parse_chain): + * gst/audioconvert/bufferframesconvert.c: + (buffer_frames_convert_init), (buffer_frames_convert_setcaps), + (buffer_frames_convert_chain): + * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init), + (gst_audio_convert_chain), + (gst_audio_convert_caps_remove_format_info), + (gst_audio_convert_getcaps), (gst_audio_convert_parse_caps), + (gst_audio_convert_setcaps), (_fixate_caps_to_int), + (gst_audio_convert_fixate), (gst_audio_convert_get_buffer), + (gst_audio_convert_buffer_to_default_format), + (gst_audio_convert_buffer_from_default_format), + (gst_audio_convert_channels): + * gst/audioconvert/gstchannelmix.h: + * gst/ffmpegcolorspace/gstffmpegcolorspace.c: + (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps), + (gst_ffmpegcsp_configure_context), (gst_ffmpegcsp_setcaps), + (gst_ffmpegcsp_chain): + * sys/oss/gstosssink.c: (gst_osssink_setcaps), + (gst_osssink_handle_event), (gst_osssink_chain): + Various plugin updates. + 2004-12-20 Wim Taymans <wim@fluendo.com> * configure.ac: diff --git a/examples/seeking/seek.c b/examples/seeking/seek.c index c85ca8b02..ec1ccc9a2 100644 --- a/examples/seeking/seek.c +++ b/examples/seeking/seek.c @@ -51,11 +51,11 @@ dynamic_link (GstPadTemplate * templ, GstPad * newpad, gpointer data) { dyn_link *connect = (dyn_link *) data; - if (!strcmp (gst_pad_get_name (newpad), connect->padname)) { - gst_element_set_state (pipeline, GST_STATE_PAUSED); - gst_bin_add (GST_BIN (pipeline), connect->bin); + if (connect->padname == NULL || + !strcmp (gst_pad_get_name (newpad), connect->padname)) { + if (connect->bin) + gst_bin_add (GST_BIN (pipeline), connect->bin); gst_pad_link (newpad, connect->target); - gst_element_set_state (pipeline, GST_STATE_PLAYING); seekable_pads = g_list_prepend (seekable_pads, newpad); rate_pads = g_list_prepend (rate_pads, newpad); @@ -273,25 +273,35 @@ make_parse_pipeline (const gchar * location) static GstElement * make_vorbis_pipeline (const gchar * location) { - GstElement *pipeline; - GstElement *src, *decoder, *audiosink; + GstElement *pipeline, *audio_bin; + GstElement *src, *demux, *decoder, *convert, *audiosink; GstPad *seekable; pipeline = gst_pipeline_new ("app"); src = gst_element_factory_make_or_warn (SOURCE, "src"); - decoder = gst_element_factory_make_or_warn ("vorbisfile", "decoder"); + demux = gst_element_factory_make_or_warn ("oggdemux", "demux"); + decoder = gst_element_factory_make_or_warn ("vorbisdec", "decoder"); + convert = gst_element_factory_make_or_warn ("audioconvert", "convert"); audiosink = gst_element_factory_make_or_warn ("osssink", "sink"); g_object_set (G_OBJECT (audiosink), "sync", TRUE, NULL); g_object_set (G_OBJECT (src), "location", location, NULL); + audio_bin = gst_bin_new ("a_decoder_bin"); + gst_bin_add (GST_BIN (pipeline), src); - gst_bin_add (GST_BIN (pipeline), decoder); - gst_bin_add (GST_BIN (pipeline), audiosink); + gst_bin_add (GST_BIN (pipeline), demux); + gst_bin_add (GST_BIN (audio_bin), decoder); + gst_bin_add (GST_BIN (audio_bin), convert); + gst_bin_add (GST_BIN (audio_bin), audiosink); + gst_bin_add (GST_BIN (pipeline), audio_bin); - gst_element_link (src, decoder); - gst_element_link (decoder, audiosink); + gst_element_link (src, demux); + gst_element_link (decoder, convert); + gst_element_link (convert, audiosink); + + setup_dynamic_link (demux, NULL, gst_element_get_pad (decoder, "sink"), NULL); seekable = gst_element_get_pad (decoder, "src"); seekable_pads = g_list_prepend (seekable_pads, seekable); @@ -305,7 +315,7 @@ static GstElement * make_mp3_pipeline (const gchar * location) { GstElement *pipeline; - GstElement *src, *decoder, *osssink, *queue, *audio_thread; + GstElement *src, *decoder, *osssink, *queue; GstPad *seekable; pipeline = gst_pipeline_new ("app"); @@ -315,8 +325,6 @@ make_mp3_pipeline (const gchar * location) queue = gst_element_factory_make_or_warn ("queue", "queue"); osssink = gst_element_factory_make_or_warn ("osssink", "sink"); - audio_thread = gst_thread_new ("a_decoder_thread"); - seekable_elements = g_list_prepend (seekable_elements, osssink); g_object_set (G_OBJECT (src), "location", location, NULL); @@ -324,9 +332,8 @@ make_mp3_pipeline (const gchar * location) gst_bin_add (GST_BIN (pipeline), src); gst_bin_add (GST_BIN (pipeline), decoder); - gst_bin_add (GST_BIN (audio_thread), queue); - gst_bin_add (GST_BIN (audio_thread), osssink); - gst_bin_add (GST_BIN (pipeline), audio_thread); + gst_bin_add (GST_BIN (pipeline), queue); + gst_bin_add (GST_BIN (pipeline), osssink); gst_element_link (src, decoder); gst_element_link (decoder, queue); @@ -345,8 +352,7 @@ make_avi_pipeline (const gchar * location) { GstElement *pipeline, *audio_bin, *video_bin; GstElement *src, *demux, *a_decoder, *v_decoder, *audiosink, *videosink; - GstElement *a_queue = NULL, *audio_thread = NULL, *v_queue = - NULL, *video_thread = NULL; + GstElement *a_queue = NULL, *v_queue = NULL; GstPad *seekable; pipeline = gst_pipeline_new ("app"); @@ -363,16 +369,14 @@ make_avi_pipeline (const gchar * location) audio_bin = gst_bin_new ("a_decoder_bin"); a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec"); - audio_thread = gst_thread_new ("a_decoder_thread"); audiosink = gst_element_factory_make_or_warn ("osssink", "a_sink"); //g_object_set (G_OBJECT (audiosink), "fragment", 0x00180008, NULL); a_queue = gst_element_factory_make_or_warn ("queue", "a_queue"); gst_element_link (a_decoder, a_queue); gst_element_link (a_queue, audiosink); gst_bin_add (GST_BIN (audio_bin), a_decoder); - gst_bin_add (GST_BIN (audio_bin), audio_thread); - gst_bin_add (GST_BIN (audio_thread), a_queue); - gst_bin_add (GST_BIN (audio_thread), audiosink); + gst_bin_add (GST_BIN (audio_bin), a_queue); + gst_bin_add (GST_BIN (audio_bin), audiosink); gst_element_set_state (audio_bin, GST_STATE_PAUSED); setup_dynamic_link (demux, "audio_00", gst_element_get_pad (a_decoder, @@ -388,7 +392,6 @@ make_avi_pipeline (const gchar * location) //v_decoder = gst_element_factory_make_or_warn ("identity", "v_dec"); //v_decoder = gst_element_factory_make_or_warn ("windec", "v_dec"); v_decoder = gst_element_factory_make_or_warn ("ffmpegdecall", "v_dec"); - video_thread = gst_thread_new ("v_decoder_thread"); videosink = gst_element_factory_make_or_warn ("ximagesink", "v_sink"); //videosink = gst_element_factory_make_or_warn ("fakesink", "v_sink"); //g_object_set (G_OBJECT (videosink), "sync", TRUE, NULL); @@ -397,9 +400,8 @@ make_avi_pipeline (const gchar * location) gst_element_link (v_decoder, v_queue); gst_element_link (v_queue, videosink); gst_bin_add (GST_BIN (video_bin), v_decoder); - gst_bin_add (GST_BIN (video_bin), video_thread); - gst_bin_add (GST_BIN (video_thread), v_queue); - gst_bin_add (GST_BIN (video_thread), videosink); + gst_bin_add (GST_BIN (video_bin), v_queue); + gst_bin_add (GST_BIN (video_bin), videosink); gst_element_set_state (video_bin, GST_STATE_PAUSED); @@ -421,7 +423,7 @@ make_mpeg_pipeline (const gchar * location) GstElement *pipeline, *audio_bin, *video_bin; GstElement *src, *demux, *a_decoder, *v_decoder, *v_filter; GstElement *audiosink, *videosink; - GstElement *a_queue, *audio_thread, *v_queue, *video_thread; + GstElement *a_queue, *v_queue; GstPad *seekable; pipeline = gst_pipeline_new ("app"); @@ -440,16 +442,14 @@ make_mpeg_pipeline (const gchar * location) audio_bin = gst_bin_new ("a_decoder_bin"); a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec"); - audio_thread = gst_thread_new ("a_decoder_thread"); a_queue = gst_element_factory_make_or_warn ("queue", "a_queue"); audiosink = gst_element_factory_make_or_warn ("osssink", "a_sink"); g_object_set (G_OBJECT (audiosink), "fragment", 0x00180008, NULL); gst_element_link (a_decoder, a_queue); gst_element_link (a_queue, audiosink); gst_bin_add (GST_BIN (audio_bin), a_decoder); - gst_bin_add (GST_BIN (audio_bin), audio_thread); - gst_bin_add (GST_BIN (audio_thread), a_queue); - gst_bin_add (GST_BIN (audio_thread), audiosink); + gst_bin_add (GST_BIN (audio_bin), a_queue); + gst_bin_add (GST_BIN (audio_bin), audiosink); setup_dynamic_link (demux, "audio_00", gst_element_get_pad (a_decoder, "sink"), audio_bin); @@ -462,7 +462,6 @@ make_mpeg_pipeline (const gchar * location) video_bin = gst_bin_new ("v_decoder_bin"); v_decoder = gst_element_factory_make_or_warn ("mpeg2dec", "v_dec"); - video_thread = gst_thread_new ("v_decoder_thread"); //g_object_set (G_OBJECT (video_thread), "priority", 2, NULL); v_queue = gst_element_factory_make_or_warn ("queue", "v_queue"); v_filter = gst_element_factory_make_or_warn ("ffmpegcolorspace", "v_filter"); @@ -470,8 +469,8 @@ make_mpeg_pipeline (const gchar * location) gst_element_link_many (v_decoder, v_queue, v_filter, NULL); gst_element_link (v_filter, videosink); - gst_bin_add_many (GST_BIN (video_bin), v_decoder, video_thread, NULL); - gst_bin_add_many (GST_BIN (video_thread), v_queue, v_filter, videosink, NULL); + gst_bin_add_many (GST_BIN (video_bin), v_decoder, NULL); + gst_bin_add_many (GST_BIN (video_bin), v_queue, v_filter, videosink, NULL); setup_dynamic_link (demux, "video_00", gst_element_get_pad (v_decoder, "sink"), video_bin); @@ -491,7 +490,7 @@ make_mpegnt_pipeline (const gchar * location) GstElement *pipeline, *audio_bin, *video_bin; GstElement *src, *demux, *a_decoder, *v_decoder, *v_filter; GstElement *audiosink, *videosink; - GstElement *a_queue, *audio_thread; + GstElement *a_queue; GstPad *seekable; pipeline = gst_pipeline_new ("app"); @@ -510,7 +509,6 @@ make_mpegnt_pipeline (const gchar * location) audio_bin = gst_bin_new ("a_decoder_bin"); a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec"); - audio_thread = gst_thread_new ("a_decoder_thread"); a_queue = gst_element_factory_make_or_warn ("queue", "a_queue"); audiosink = gst_element_factory_make_or_warn ("osssink", "a_sink"); //g_object_set (G_OBJECT (audiosink), "fragment", 0x00180008, NULL); @@ -518,9 +516,8 @@ make_mpegnt_pipeline (const gchar * location) gst_element_link (a_decoder, a_queue); gst_element_link (a_queue, audiosink); gst_bin_add (GST_BIN (audio_bin), a_decoder); - gst_bin_add (GST_BIN (audio_bin), audio_thread); - gst_bin_add (GST_BIN (audio_thread), a_queue); - gst_bin_add (GST_BIN (audio_thread), audiosink); + gst_bin_add (GST_BIN (audio_bin), a_queue); + gst_bin_add (GST_BIN (audio_bin), audiosink); setup_dynamic_link (demux, "audio_00", gst_element_get_pad (a_decoder, "sink"), audio_bin); @@ -758,7 +755,7 @@ update_scale (gpointer data) gboolean res; duration = 0; - clock = gst_bin_get_clock (GST_BIN (pipeline)); + clock = gst_pipeline_get_clock (GST_PIPELINE (pipeline)); if (elem_seek) { if (seekable_elements) { @@ -811,25 +808,6 @@ update_scale (gpointer data) } static gboolean -iterate (gpointer data) -{ - gboolean res; - - if (!GST_FLAG_IS_SET (GST_OBJECT (data), GST_BIN_SELF_SCHEDULABLE)) { - res = gst_bin_iterate (GST_BIN (data)); - } else { - g_usleep (500); - res = gst_element_get_state (GST_ELEMENT (data)) == GST_STATE_PLAYING; - } - - if (!res) { - gtk_timeout_remove (update_id); - g_print ("stopping iterations\n"); - } - return res; -} - -static gboolean start_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data) { gst_element_set_state (pipeline, GST_STATE_PAUSED); @@ -880,7 +858,6 @@ stop_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data) } gst_element_set_state (pipeline, GST_STATE_PLAYING); - gtk_idle_add ((GtkFunction) iterate, pipeline); update_id = gtk_timeout_add (UPDATE_INTERVAL, (GtkFunction) update_scale, pipeline); @@ -890,9 +867,11 @@ stop_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data) static void play_cb (GtkButton * button, gpointer data) { - if (gst_element_get_state (pipeline) != GST_STATE_PLAYING) { + GstElementState state; + + gst_element_get_state (pipeline, &state, NULL, NULL); + if (state != GST_STATE_PLAYING) { gst_element_set_state (pipeline, GST_STATE_PLAYING); - gtk_idle_add ((GtkFunction) iterate, pipeline); update_id = gtk_timeout_add (UPDATE_INTERVAL, (GtkFunction) update_scale, pipeline); } @@ -901,7 +880,10 @@ play_cb (GtkButton * button, gpointer data) static void pause_cb (GtkButton * button, gpointer data) { - if (gst_element_get_state (pipeline) != GST_STATE_PAUSED) { + GstElementState state; + + gst_element_get_state (pipeline, &state, NULL, NULL); + if (state != GST_STATE_PAUSED) { gst_element_set_state (pipeline, GST_STATE_PAUSED); gtk_timeout_remove (update_id); } @@ -910,7 +892,10 @@ pause_cb (GtkButton * button, gpointer data) static void stop_cb (GtkButton * button, gpointer data) { - if (gst_element_get_state (pipeline) != GST_STATE_READY) { + GstElementState state; + + gst_element_get_state (pipeline, &state, NULL, NULL); + if (state != GST_STATE_READY) { gst_element_set_state (pipeline, GST_STATE_READY); gtk_adjustment_set_value (adjustment, 0.0); gtk_timeout_remove (update_id); @@ -1032,18 +1017,13 @@ main (int argc, char **argv) if (verbose) { g_signal_connect (pipeline, "deep_notify", - G_CALLBACK (gst_element_default_deep_notify), NULL); + G_CALLBACK (gst_object_default_deep_notify), NULL); } - g_signal_connect (pipeline, "error", G_CALLBACK (gst_element_default_error), - NULL); - gtk_main (); gst_element_set_state (pipeline, GST_STATE_NULL); - //gst_object_unref (GST_OBJECT (pipeline)); - - //g_mem_chunk_info(); + gst_object_unref (GST_OBJECT (pipeline)); return 0; } |