From: <tp...@fr...> - 2005-10-29 13:39:36
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Sat Oct 29 2005 06:39:35 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_query_convert), (gst_ogg_demux_chain_peer), (gst_ogg_demux_perform_seek), (gst_ogg_demux_read_chain), (gst_ogg_demux_read_end_chain): Explicitly check for -1 values before doing a conversion and always map them to -1. (#315545) Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2033&r2=1.2034 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c.diff?r1=1.109&r2=1.110 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2033 retrieving revision 1.2034 diff -u -d -r1.2033 -r1.2034 --- ChangeLog 28 Oct 2005 09:56:47 -0000 1.2033 +++ ChangeLog 29 Oct 2005 13:39:20 -0000 1.2034 @@ -1,3 +1,11 @@ +2005-10-29 Tim-Philipp Müller <tim at centricular dot net> + + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_query_convert), + (gst_ogg_demux_chain_peer), (gst_ogg_demux_perform_seek), + (gst_ogg_demux_read_chain), (gst_ogg_demux_read_end_chain): + Explicitly check for -1 values before doing a conversion + and always map them to -1. (#315545) 2005-10-28 Thomas Vander Stichele <thomas at apestaart dot org> * gst/playback/gstplaybin.c: (gen_video_element): Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c,v retrieving revision 1.109 retrieving revision 1.110 diff -u -d -r1.109 -r1.110 --- gstoggdemux.c 23 Oct 2005 09:57:59 -0000 1.109 +++ gstoggdemux.c 29 Oct 2005 13:39:23 -0000 1.110 @@ -726,6 +726,21 @@ return GST_FLOW_OK; } +static gboolean +gst_ogg_pad_query_convert (GstOggPad * ogg_pad, GstFormat from_format, + gint64 from_value, GstFormat * to_format, gint64 * to_value) +{ + if (from_value == -1) { + *to_value = -1; + return TRUE; + } + g_return_val_if_fail (ogg_pad->elem_pad != NULL, FALSE); + return gst_pad_query_convert (ogg_pad->elem_pad, + from_format, from_value, to_format, to_value); +} /* send packet to internal element */ static GstFlowReturn gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet) @@ -755,7 +770,7 @@ ogg->current_granule = packet->granulepos; format = GST_FORMAT_TIME; - if (!gst_pad_query_convert (pad->elem_pad, + if (!gst_ogg_pad_query_convert (pad, GST_FORMAT_DEFAULT, packet->granulepos, &format, (gint64 *) & ogg->current_time)) { g_warning ("could not convert granulepos to time"); @@ -1564,7 +1579,7 @@ continue; format = GST_FORMAT_TIME; - if (!gst_pad_query_convert (pad->elem_pad, + if (!gst_ogg_pad_query_convert (pad, GST_FORMAT_DEFAULT, granulepos, &format, (gint64 *) & granuletime)) { g_warning ("could not convert granulepos to time"); @@ -1823,7 +1838,7 @@ GstFormat target; target = GST_FORMAT_TIME; - if (!gst_pad_query_convert (pad->elem_pad, + if (!gst_ogg_pad_query_convert (pad, GST_FORMAT_DEFAULT, pad->first_granule, &target, (gint64 *) & pad->first_time)) { g_warning ("could not convert granule to time"); @@ -1887,7 +1902,7 @@ GST_FORMAT_DEFAULT, pad->last_granule, &target, (gint64 *) & pad->last_time)) { |
From: <tp...@fr...> - 2005-11-08 12:13:09
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Tue Nov 08 2005 04:13:08 PST Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_internal_chain), (gst_ogg_pad_submit_packet), (gst_ogg_chain_new): Initialise segment_stop to GST_CLOCK_TIME_NONE when creating a new chain; should fix live streaming. Also add more debug output and fix a typo. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2048&r2=1.2049 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c.diff?r1=1.111&r2=1.112 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2048 retrieving revision 1.2049 diff -u -d -r1.2048 -r1.2049 --- ChangeLog 8 Nov 2005 12:08:10 -0000 1.2048 +++ ChangeLog 8 Nov 2005 12:12:55 -0000 1.2049 @@ -1,3 +1,11 @@ +2005-11-08 Tim-Philipp Müller <tim at centricular dot net> + + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_internal_chain), + (gst_ogg_pad_submit_packet), (gst_ogg_chain_new): + Initialise segment_stop to GST_CLOCK_TIME_NONE when + creating a new chain; should fix live streaming. Also + add more debug output and fix a typo. 2005-11-08 Brian Cameron <brian dot cameron at sun dot com> Reviewed by: Tim-Philipp Müller <tim at centricular dot net> Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c,v retrieving revision 1.111 retrieving revision 1.112 diff -u -d -r1.111 -r1.112 --- gstoggdemux.c 31 Oct 2005 18:35:45 -0000 1.111 +++ gstoggdemux.c 8 Nov 2005 12:12:55 -0000 1.112 @@ -571,7 +571,8 @@ ogg = GST_OGG_DEMUX (oggpad->ogg); timestamp = GST_BUFFER_TIMESTAMP (buffer); - GST_DEBUG_OBJECT (oggpad, "received buffer from iternal pad, TS=%lld", + GST_DEBUG_OBJECT (oggpad, "received buffer from internal pad, TS=%" + GST_TIME_FORMAT "=%" G_GINT64_FORMAT, GST_TIME_ARGS (timestamp), timestamp); if (oggpad->start_time == GST_CLOCK_TIME_NONE) { @@ -829,14 +830,30 @@ GstEvent *event; GstClockTime segment_start, segment_stop; + GST_DEBUG ("chain->begin_time: %" GST_TIME_FORMAT, + GST_TIME_ARGS (chain->begin_time)); + GST_DEBUG ("chain->segment_start: %" GST_TIME_FORMAT, + GST_TIME_ARGS (chain->segment_start)); + GST_DEBUG ("chain->segment_stop: %" GST_TIME_FORMAT, + GST_TIME_ARGS (chain->segment_stop)); if (chain->begin_time != GST_CLOCK_TIME_NONE) { segment_start = chain->segment_start - chain->begin_time; - segment_stop = chain->segment_stop - chain->begin_time; + if (chain->segment_stop != GST_CLOCK_TIME_NONE) { + segment_stop = chain->segment_stop - chain->begin_time; + } else { + segment_stop = GST_CLOCK_TIME_NONE; + } } else { segment_start = chain->segment_start; segment_stop = chain->segment_stop; } + GST_DEBUG ("segment_start: %" GST_TIME_FORMAT, + GST_TIME_ARGS (segment_start)); + GST_DEBUG ("segment_stop: %" GST_TIME_FORMAT, + GST_TIME_ARGS (segment_stop)); /* create the discont event we are going to send out */ event = gst_event_new_newsegment (FALSE, ogg->segment_rate, GST_FORMAT_TIME, segment_start, segment_stop, 0); @@ -934,6 +951,7 @@ chain->streams = g_array_new (FALSE, TRUE, sizeof (GstOggPad *)); chain->begin_time = GST_CLOCK_TIME_NONE; chain->segment_start = GST_CLOCK_TIME_NONE; + chain->segment_stop = GST_CLOCK_TIME_NONE; chain->total_time = GST_CLOCK_TIME_NONE; return chain; |
From: <tp...@fr...> - 2005-11-28 22:55:09
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Mon Nov 28 2005 14:55:00 PST Log message: * ext/ogg/gstoggmux.c: (gst_ogg_mux_send_headers): Don't leak caps. Modified files: . : ChangeLog ext/ogg : gstoggmux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2169&r2=1.2170 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstoggmux.c.diff?r1=1.48&r2=1.49 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2169 retrieving revision 1.2170 diff -u -d -r1.2169 -r1.2170 --- ChangeLog 28 Nov 2005 22:13:32 -0000 1.2169 +++ ChangeLog 28 Nov 2005 22:54:48 -0000 1.2170 @@ -1,3 +1,8 @@ +2005-11-28 Tim-Philipp Müller <tim at centricular dot net> + + * ext/ogg/gstoggmux.c: (gst_ogg_mux_send_headers): + Don't leak caps. 2005-11-28 Julien MOUTTE <ju...@mo...> * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_put), Index: gstoggmux.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstoggmux.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -d -r1.48 -r1.49 --- gstoggmux.c 21 Nov 2005 16:35:23 -0000 1.48 +++ gstoggmux.c 28 Nov 2005 22:54:48 -0000 1.49 @@ -969,6 +969,7 @@ if (caps) { caps = gst_ogg_mux_set_header_on_caps (caps, hbufs); gst_pad_set_caps (mux->srcpad, caps); + gst_caps_unref (caps); } /* and send the buffers */ hwalk = hbufs; |
From: <tp...@ke...> - 2006-03-02 12:36:17
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Thu Mar 02 2006 12:36:11 UTC Log message: * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init), (gst_ogm_text_parse_init), (gst_ogm_parse_sink_convert), (gst_ogm_parse_sink_query), (gst_ogm_parse_chain): Don't remove/re-add source pad if the new caps are the same as the old caps anyway (#333042). When removing source pad, don't unref it afterwards - we didn't ref it when adding. Sprinkle some GST_DEBUG_FUNCPTR goodness here and there. Don't leak references after using gst_pad_get_parent(). Return downstream flow return value in chain function. Modified files: . : ChangeLog ext/ogg : gstogmparse.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2436&r2=1.2437 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstogmparse.c.diff?r1=1.20&r2=1.21 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2436 retrieving revision 1.2437 diff -u -d -r1.2436 -r1.2437 --- ChangeLog 2 Mar 2006 11:28:22 -0000 1.2436 +++ ChangeLog 2 Mar 2006 12:35:59 -0000 1.2437 @@ -1,3 +1,16 @@ +2006-03-02 Tim-Philipp Müller <tim at centricular dot net> + + * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_init), + (gst_ogm_video_parse_init), (gst_ogm_text_parse_init), + (gst_ogm_parse_sink_convert), (gst_ogm_parse_sink_query), + (gst_ogm_parse_chain): + Don't remove/re-add source pad if the new caps are the same as + the old caps anyway (#333042). When removing source pad, don't + unref it afterwards - we didn't ref it when adding. Sprinkle some + GST_DEBUG_FUNCPTR goodness here and there. Don't leak references + after using gst_pad_get_parent(). Return downstream flow return + value in chain function. 2006-03-02 Wim Taymans <wi...@fl...> * docs/plugins/gst-plugins-base-plugins-docs.sgml: Index: gstogmparse.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstogmparse.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- gstogmparse.c 1 Feb 2006 11:56:10 -0000 1.20 +++ gstogmparse.c 2 Mar 2006 12:35:59 -0000 1.21 @@ -346,8 +346,10 @@ ogm->sinkpad = gst_pad_new_from_static_template (&ogm_audio_parse_sink_template_factory, "sink"); - gst_pad_set_query_function (ogm->sinkpad, gst_ogm_parse_sink_query); - gst_pad_set_chain_function (ogm->sinkpad, gst_ogm_parse_chain); + gst_pad_set_query_function (ogm->sinkpad, + GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_query)); + gst_pad_set_chain_function (ogm->sinkpad, + GST_DEBUG_FUNCPTR (gst_ogm_parse_chain)); gst_element_add_pad (GST_ELEMENT (ogm), ogm->sinkpad); #if 0 @@ -366,8 +368,10 @@ gst_pad_new_from_static_template (&ogm_video_parse_sink_template_factory, @@ -388,8 +392,10 @@ gst_pad_set_query_type_function (ogm->sinkpad, gst_ogm_parse_get_sink_querytypes); @@ -483,15 +489,16 @@ break; } + gst_object_unref (ogm); return res; } static gboolean gst_ogm_parse_sink_query (GstPad * pad, GstQuery * query) { - GstOgmParse *ogm = GST_OGM_PARSE (GST_PAD_PARENT (pad)); + GstOgmParse *ogm = GST_OGM_PARSE (gst_pad_get_parent (pad)); GstFormat format; - gboolean res; + gboolean res = FALSE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_POSITION: @@ -501,7 +508,7 @@ gst_query_parse_position (query, &format, NULL); if (format != GST_FORMAT_DEFAULT && format != GST_FORMAT_TIME) - return FALSE; + break; if ((res = gst_ogm_parse_sink_convert (pad, GST_FORMAT_DEFAULT, ogm->next_granulepos, &format, &val))) { @@ -527,13 +534,16 @@ res = gst_pad_query_default (pad, query); static GstFlowReturn gst_ogm_parse_chain (GstPad * pad, GstBuffer * buffer) - GstOgmParse *ogm = GST_OGM_PARSE (gst_pad_get_parent (pad)); + GstFlowReturn ret = GST_FLOW_OK; + GstOgmParse *ogm = GST_OGM_PARSE (GST_PAD_PARENT (pad)); GstBuffer *buf = GST_BUFFER (buffer); guint8 *data = GST_BUFFER_DATA (buf); guint size = GST_BUFFER_SIZE (buf); @@ -628,21 +638,28 @@ } if (ogm->srcpad) { - GST_WARNING_OBJECT (ogm, "Already an existing pad %s:%s", - GST_DEBUG_PAD_NAME (ogm->srcpad)); - gst_element_remove_pad (GST_ELEMENT (ogm), ogm->srcpad); - gst_object_unref (ogm->srcpad); + GstCaps *current_caps = GST_PAD_CAPS (ogm->srcpad); + if (current_caps && !gst_caps_is_equal (current_caps, caps)) { + GST_WARNING_OBJECT (ogm, "Already an existing pad %s:%s", + GST_DEBUG_PAD_NAME (ogm->srcpad)); + gst_element_remove_pad (GST_ELEMENT (ogm), ogm->srcpad); + ogm->srcpad = NULL; + } else { + GST_DEBUG_OBJECT (ogm, "Existing pad has the same caps, do nothing"); + } - if (caps) { - ogm->srcpad = gst_pad_new ("src", GST_PAD_SRC); - gst_pad_set_caps (ogm->srcpad, caps); - } else { - GST_WARNING_OBJECT (ogm, - "No fixed caps were found, carrying on with template"); - ogm->srcpad = gst_pad_new_from_template (ogm->srcpadtempl, "src"); + if (ogm->srcpad == NULL) { + if (caps) { + ogm->srcpad = gst_pad_new ("src", GST_PAD_SRC); + gst_pad_set_caps (ogm->srcpad, caps); + GST_WARNING_OBJECT (ogm, + "No fixed caps were found, carrying on with template"); + ogm->srcpad = gst_pad_new_from_template (ogm->srcpadtempl, "src"); + gst_element_add_pad (GST_ELEMENT (ogm), ogm->srcpad); - gst_element_add_pad (GST_ELEMENT (ogm), ogm->srcpad); } case 0x03: @@ -701,7 +718,10 @@ break; } gst_buffer_set_caps (sbuf, GST_PAD_CAPS (ogm->srcpad)); - gst_pad_push (ogm->srcpad, sbuf); + ret = gst_pad_push (ogm->srcpad, sbuf); + if (ret != GST_FLOW_OK) { + GST_DEBUG_OBJECT (ogm, "Flow return: %s", gst_flow_get_name (ret)); } else { GST_ELEMENT_ERROR (ogm, STREAM, WRONG_TYPE, ("Wrong packet startcode 0x%02x", data[0]), (NULL)); @@ -711,7 +731,7 @@ gst_buffer_unref (buf); - return GST_FLOW_OK; + return ret; static GstStateChangeReturn |
From: <tp...@ke...> - 2006-03-02 13:13:19
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Thu Mar 02 2006 13:13:12 UTC Log message: * ext/ogg/gstogmparse.c: (gst_ogm_parse_class_init), (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init), (gst_ogm_text_parse_init), (gst_ogm_parse_change_state): In state change function, first chain up to parent class, then handle downwards state change stuff. Remove some commented out cruft from 0.8 code. Modified files: . : ChangeLog ext/ogg : gstogmparse.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2437&r2=1.2438 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstogmparse.c.diff?r1=1.21&r2=1.22 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2437 retrieving revision 1.2438 diff -u -d -r1.2437 -r1.2438 --- ChangeLog 2 Mar 2006 12:35:59 -0000 1.2437 +++ ChangeLog 2 Mar 2006 13:13:00 -0000 1.2438 @@ -1,5 +1,14 @@ 2006-03-02 Tim-Philipp Müller <tim at centricular dot net> + * ext/ogg/gstogmparse.c: (gst_ogm_parse_class_init), + (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init), + (gst_ogm_text_parse_init), (gst_ogm_parse_change_state): + In state change function, first chain up to parent class, + then handle downwards state change stuff. Remove some + commented out cruft from 0.8 code. + +2006-03-02 Tim-Philipp Müller <tim at centricular dot net> * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init), (gst_ogm_text_parse_init), (gst_ogm_parse_sink_convert), (gst_ogm_parse_sink_query), Index: gstogmparse.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstogmparse.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- gstogmparse.c 2 Mar 2006 12:35:59 -0000 1.21 +++ gstogmparse.c 2 Mar 2006 13:13:00 -0000 1.22 @@ -140,10 +140,6 @@ static void gst_ogm_audio_parse_init (GstOgmParse * ogm); static void gst_ogm_text_parse_init (GstOgmParse * ogm); -#if 0 -static const GstFormat *gst_ogm_parse_get_sink_formats (GstPad * pad); -#endif - static const GstQueryType *gst_ogm_parse_get_sink_querytypes (GstPad * pad); static gboolean gst_ogm_parse_sink_query (GstPad * pad, GstQuery * query); static gboolean gst_ogm_parse_sink_convert (GstPad * pad, GstFormat src_format, @@ -325,9 +321,10 @@ { GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); - parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + parent_class = g_type_class_peek_parent (klass); - gstelement_class->change_state = gst_ogm_parse_change_state; + gstelement_class->change_state = + GST_DEBUG_FUNCPTR (gst_ogm_parse_change_state); } static void @@ -352,11 +349,6 @@ GST_DEBUG_FUNCPTR (gst_ogm_parse_chain)); gst_element_add_pad (GST_ELEMENT (ogm), ogm->sinkpad); - ogm->srcpad = gst_pad_new_from_template (audio_src_templ, "src"); - gst_pad_use_explicit_caps (ogm->srcpad); - gst_element_add_pad (GST_ELEMENT (ogm), ogm->srcpad); ogm->srcpad = NULL; ogm->srcpadtempl = audio_src_templ; @@ -374,11 +366,6 @@ - ogm->srcpad = gst_pad_new_from_template (video_src_templ, "src"); ogm->srcpadtempl = video_src_templ; @@ -398,29 +385,10 @@ - ogm->srcpad = gst_pad_new_from_template (text_src_templ, "src"); ogm->srcpadtempl = text_src_templ; -static const GstFormat * -gst_ogm_parse_get_sink_formats (GstPad * pad) -{ - static GstFormat formats[] = { - GST_FORMAT_DEFAULT, - GST_FORMAT_TIME, - 0 - }; - return formats; -} static const GstQueryType * gst_ogm_parse_get_sink_querytypes (GstPad * pad) @@ -737,8 +705,13 @@ static GstStateChangeReturn gst_ogm_parse_change_state (GstElement * element, GstStateChange transition) + GstStateChangeReturn ret; GstOgmParse *ogm = GST_OGM_PARSE (element); + ret = parent_class->change_state (element, transition); + if (ret != GST_STATE_CHANGE_SUCCESS) + return ret; switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: if (ogm->srcpad) { @@ -752,7 +725,7 @@ break; } - return parent_class->change_state (element, transition); + return ret; gboolean |
From: <tp...@ke...> - 2006-03-21 17:47:21
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Tue Mar 21 2006 17:47:16 UTC Log message: * ext/ogg/gstoggparse.c: (gst_ogg_parse_find_stream), (gst_ogg_parse_chain): Fix very inefficient usage of linked lists (#335365). Modified files: . : ChangeLog ext/ogg : gstoggparse.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2498&r2=1.2499 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstoggparse.c.diff?r1=1.7&r2=1.8 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2498 retrieving revision 1.2499 diff -u -d -r1.2498 -r1.2499 --- ChangeLog 21 Mar 2006 14:26:00 -0000 1.2498 +++ ChangeLog 21 Mar 2006 17:47:04 -0000 1.2499 @@ -1,3 +1,9 @@ +2006-03-21 Tim-Philipp Müller <tim at centricular dot net> + + * ext/ogg/gstoggparse.c: (gst_ogg_parse_find_stream), + (gst_ogg_parse_chain): + Fix very inefficient usage of linked lists (#335365). 2006-03-21 Edward Hervey <ed...@fl...> * ext/ogg/gstoggdemux.c: (gst_ogg_pad_dispose): Index: gstoggparse.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstoggparse.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- gstoggparse.c 3 Feb 2006 17:45:43 -0000 1.7 +++ gstoggparse.c 21 Mar 2006 17:47:04 -0000 1.8 @@ -164,10 +164,10 @@ static GstOggStream * gst_ogg_parse_find_stream (GstOggParse * parser, guint32 serialno) { - gint i; + GSList *l; - for (i = 0; i < g_slist_length (parser->oggstreams); i++) { - GstOggStream *stream = g_slist_nth_data (parser->oggstreams, i); + for (l = parser->oggstreams; l != NULL; l = l->next) { + GstOggStream *stream = (GstOggStream *) l->data; if (stream->serialno == serialno) return stream; @@ -504,13 +504,14 @@ GstCaps *caps; GstStructure *structure; GValue array = { 0 }; - gint i, count = 0; + gint count = 0; gboolean found_pending_headers = FALSE; + GSList *l; g_value_init (&array, GST_TYPE_ARRAY); - for (i = 0; i < g_slist_length (ogg->oggstreams); i++) { - GstOggStream *stream = g_slist_nth_data (ogg->oggstreams, i); + for (l = ogg->oggstreams; l != NULL; l = l->next) { + GstOggStream *stream = (GstOggStream *) l->data; if (g_slist_length (stream->headers) == 0) { GST_LOG_OBJECT (ogg, "No primary header found for stream %u", @@ -523,8 +524,8 @@ count++; } int j; for (j = 1; j < g_slist_length (stream->headers); j++) { @@ -550,16 +551,16 @@ "(one per page)", count); /* Now, we do the same thing, but push buffers... */ result = gst_pad_push (ogg->srcpad, GST_BUFFER (stream->headers->data)); if (result != GST_FLOW_OK) return result; @@ -573,24 +574,27 @@ ogg->in_headers = 0; /* And finally the pending data pages */ - int j; + GSList *k; - if (g_slist_length (stream->unknown_pages) > 0) { - if (found_pending_headers) { - GST_WARNING_OBJECT (ogg, "Incorrectly muxed headers found at " - "approximate offset %lld", ogg->offset); - } - found_pending_headers = TRUE; - } else + if (stream->unknown_pages == NULL) continue; + if (found_pending_headers) { + GST_WARNING_OBJECT (ogg, "Incorrectly muxed headers found at " + "approximate offset %lld", ogg->offset); + } + found_pending_headers = TRUE; GST_LOG_OBJECT (ogg, "Pushing %d pending pages after headers", g_slist_length (stream->unknown_pages) + 1); - for (j = 0; j < g_slist_length (stream->unknown_pages); j++) { - result = gst_pad_push (ogg->srcpad, - GST_BUFFER (g_slist_nth_data (stream->unknown_pages, j))); + for (k = stream->unknown_pages; k != NULL; k = k->next) { + GstBuffer *buf; + buf = GST_BUFFER (k->data); + result = gst_pad_push (ogg->srcpad, buf); if (result != GST_FLOW_OK) return result; } |
From: <tp...@ke...> - 2006-05-25 09:32:45
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Thu May 25 2006 09:32:43 UTC Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind): Use gst_type_find_helper_for_buffer() to find the type of stream from the first packet. * configure.ac: Bump requirements to core CVS (needed for vorbis typefinding to work). Modified files: . : ChangeLog configure.ac ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2660&r2=1.2661 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/configure.ac.diff?r1=1.641&r2=1.642 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c.diff?r1=1.149&r2=1.150 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2660 retrieving revision 1.2661 diff -u -d -r1.2660 -r1.2661 --- ChangeLog 24 May 2006 08:34:53 -0000 1.2660 +++ ChangeLog 25 May 2006 09:32:31 -0000 1.2661 @@ -1,3 +1,13 @@ +2006-05-25 Tim-Philipp Müller <tim at centricular dot net> + + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind): + Use gst_type_find_helper_for_buffer() to find the type + of stream from the first packet. + * configure.ac: + Bump requirements to core CVS (needed for vorbis + typefinding to work). 2006-05-24 Edward Hervey <ed...@fl...> * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Index: configure.ac RCS file: /cvs/gstreamer/gst-plugins-base/configure.ac,v retrieving revision 1.641 retrieving revision 1.642 diff -u -d -r1.641 -r1.642 --- configure.ac 15 May 2006 12:18:13 -0000 1.641 +++ configure.ac 25 May 2006 09:32:31 -0000 1.642 @@ -50,7 +50,7 @@ AM_PROG_LIBTOOL dnl *** required versions of GStreamer stuff *** -GST_REQ=0.10.5.1 +GST_REQ=0.10.6.1 dnl *** autotools stuff **** Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstoggdemux.c,v retrieving revision 1.149 retrieving revision 1.150 diff -u -d -r1.149 -r1.150 --- gstoggdemux.c 15 May 2006 15:01:08 -0000 1.149 +++ gstoggdemux.c 25 May 2006 09:32:31 -0000 1.150 @@ -27,6 +27,9 @@ #include <string.h> #include <gst/gst-i18n-plugin.h> +#include <gst/base/gsttypefindhelper.h> static const GstElementDetails gst_ogg_demux_details = GST_ELEMENT_DETAILS ("Ogg demuxer", "Codec/Demuxer", @@ -224,7 +227,6 @@ static gboolean gst_ogg_pad_src_query (GstPad * pad, GstQuery * query); static gboolean gst_ogg_pad_event (GstPad * pad, GstEvent * event); static GstCaps *gst_ogg_pad_getcaps (GstPad * pad); -static GstCaps *gst_ogg_type_find (ogg_packet * packet); static GstOggPad *gst_ogg_chain_get_stream (GstOggChain * chain, glong serialno); @@ -783,6 +785,7 @@ static gboolean gst_ogg_pad_typefind (GstOggPad * pad, ogg_packet * packet) { + GstBuffer *buf; GstCaps *caps; GstElement *element = NULL; @@ -793,7 +796,16 @@ if (GST_PAD_CAPS (pad) != NULL) return TRUE; - caps = gst_ogg_type_find (packet); + /* The ogg spec defines that the first packet of an ogg stream must identify + * the stream. Therefore ogg can use a simplified approach to typefinding + * and only needs to check the first packet */ + buf = gst_buffer_new (); + GST_BUFFER_DATA (buf) = packet->packet; + GST_BUFFER_SIZE (buf) = packet->bytes; + GST_BUFFER_OFFSET (buf) = 0; + caps = gst_type_find_helper_for_buffer (GST_OBJECT (pad), buf, NULL); + gst_buffer_unref (buf); if (caps == NULL) { GST_WARNING_OBJECT (ogg, @@ -805,6 +817,8 @@ * we are in the streaming mode to calculate the first timestamp. */ GList *factories; + GST_LOG_OBJECT (ogg, "found caps: %" GST_PTR_FORMAT, caps); /* first filter out the interesting element factories */ factories = gst_default_registry_feature_filter ( (GstPluginFeatureFilter) gst_ogg_demux_factory_filter, FALSE, caps); @@ -2898,80 +2912,6 @@ return res; } -/*** typefinding **************************************************************/ -/* ogg supports its own typefinding because the ogg spec defines that the first - * packet of an ogg stream must identify the stream. Therefore ogg can use a - * simplified approach at typefinding. - */ -typedef struct -{ - ogg_packet *packet; - guint best_probability; - GstCaps *caps; -} -OggTypeFind; - -static guint8 * -ogg_find_peek (gpointer data, gint64 offset, guint size) - OggTypeFind *find = (OggTypeFind *) data; - /* We don't support negative offset (from stream end); nothing embedded in ogg - * ever needs them */ - if (offset >= 0 && offset + size <= find->packet->bytes) { - return ((guint8 *) find->packet->packet) + offset; - } else { - return NULL; - } -static void -ogg_find_suggest (gpointer data, guint probability, const GstCaps * caps) - if (probability > find->best_probability) { - GstCaps *copy = gst_caps_copy (caps); - gst_caps_replace (&find->caps, copy); - gst_caps_unref (copy); - find->best_probability = probability; -static GstCaps * -gst_ogg_type_find (ogg_packet * packet) - GstTypeFind gst_find; - OggTypeFind find; - GList *walk, *type_list = NULL; - walk = type_list = gst_type_find_factory_get_list (); - find.packet = packet; - find.best_probability = 0; - find.caps = NULL; - gst_find.data = &find; - gst_find.peek = ogg_find_peek; - gst_find.suggest = ogg_find_suggest; - gst_find.get_length = NULL; - while (walk) { - GstTypeFindFactory *factory = GST_TYPE_FIND_FACTORY (walk->data); - gst_type_find_factory_call_function (factory, &gst_find); - if (find.best_probability >= GST_TYPE_FIND_MAXIMUM) - break; - walk = g_list_next (walk); - gst_plugin_feature_list_free (type_list); - if (find.best_probability > 0) - return find.caps; - return NULL; gboolean gst_ogg_demux_plugin_init (GstPlugin * plugin) |