summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2004-12-29 11:04:27 +0000
committerWim Taymans <wim.taymans@gmail.com>2004-12-29 11:04:27 +0000
commitc64491635f04b7471bb419484747d55669013e10 (patch)
treed454895a826d5042bafda7627767df461d581bbf
parentc092010fafd47e4928ae630c1b3962b588ad6652 (diff)
downloadgstreamer-plugins-bad-c64491635f04b7471bb419484747d55669013e10.tar.gz
Various plugin updates.
Original commit message from CVS: Various plugin updates.
-rw-r--r--ChangeLog70
-rw-r--r--examples/seeking/seek.c124
2 files changed, 122 insertions, 72 deletions
diff --git a/ChangeLog b/ChangeLog
index 325b6e9d7..6affd5e7c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}