From: <rb...@fr...> - 2004-10-01 13:28:53
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Fri Oct 01 2004 06:28:42 PDT Log message: * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer), (gst_ogg_mux_queue_pads): Handle EOS properly. Modified files: . : ChangeLog ext/ogg : gstoggmux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1106&r2=1.1107 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggmux.c.diff?r1=1.18&r2=1.19 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1106 retrieving revision 1.1107 diff -u -d -r1.1106 -r1.1107 --- ChangeLog 1 Oct 2004 13:00:41 -0000 1.1106 +++ ChangeLog 1 Oct 2004 13:28:29 -0000 1.1107 @@ -1,3 +1,9 @@ +2004-10-01 Ronald S. Bultje <rb...@ro...> + + * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer), + (gst_ogg_mux_queue_pads): + Handle EOS properly. 2004-10-01 Sebastien Cote <sc...@he...> Reviewed by: Ronald S. Bultje <rb...@ro...> Index: gstoggmux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggmux.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- gstoggmux.c 22 Sep 2004 14:35:12 -0000 1.18 +++ gstoggmux.c 1 Oct 2004 13:28:30 -0000 1.19 @@ -425,6 +425,7 @@ switch (type) { case GST_EVENT_EOS: + pad->eos = TRUE; gst_event_unref (event); return NULL; case GST_EVENT_DISCONTINUOUS: @@ -569,6 +570,9 @@ walk = walk->next; + if (pad->eos) + continue; /* try to get a new buffer for this pad if needed and possible */ if (pad->buffer == NULL && GST_PAD_IS_USABLE (pad->pad)) { pad->buffer = gst_ogg_mux_next_buffer (pad); |
From: <rb...@fr...> - 2004-10-18 19:12:47
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Mon Oct 18 2004 12:12:45 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query), (gst_ogg_demux_src_event), (gst_ogg_pad_populate), (gst_ogg_pad_push): Yay for non-lineair granulepos in theora. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1182&r2=1.1183 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.40&r2=1.41 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1182 retrieving revision 1.1183 diff -u -d -r1.1182 -r1.1183 --- ChangeLog 18 Oct 2004 17:49:09 -0000 1.1182 +++ ChangeLog 18 Oct 2004 19:12:32 -0000 1.1183 @@ -1,3 +1,10 @@ +2004-10-18 Ronald S. Bultje <rb...@ro...> + + * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query), + (gst_ogg_demux_src_event), (gst_ogg_pad_populate), + (gst_ogg_pad_push): + Yay for non-lineair granulepos in theora. 2004-10-18 Wim Taymans <wi...@fl...> * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps), Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- gstoggdemux.c 18 Oct 2004 15:49:00 -0000 1.40 +++ gstoggdemux.c 18 Oct 2004 19:12:32 -0000 1.41 @@ -408,14 +408,14 @@ switch (type) { case GST_QUERY_TOTAL:{ if (cur->length != 0 && cur->length != cur->start) { - granulepos = cur->length - cur->start; + granulepos = cur->length; res = TRUE; } break; } case GST_QUERY_POSITION: - granulepos = cur->known_offset - cur->start; + granulepos = cur->known_offset; @@ -423,18 +423,28 @@ } if (res) { + GstFormat fmt = GST_FORMAT_TIME; + guint64 base, time; + /* subtract base */ + gst_pad_convert (GST_PAD_PEER (pad), + GST_FORMAT_DEFAULT, granulepos, &fmt, &time); + GST_FORMAT_DEFAULT, cur->start, &fmt, &base); + time -= base; /* still ok, got a granulepos then */ switch (*format) { - case GST_FORMAT_DEFAULT: + case GST_FORMAT_TIME: /* fine, result should be granulepos */ - *value = granulepos; + *value = time; break; default: /* something we have to ask our peer */ if (GST_PAD_PEER (pad)) { res = gst_pad_convert (GST_PAD_PEER (pad), - GST_FORMAT_DEFAULT, granulepos, format, value); + GST_FORMAT_TIME, time, format, value); } else { res = FALSE; } @@ -473,7 +483,7 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: { - gint64 offset, position; + gint64 offset, position, total; GstFormat format, my_format; gboolean res; @@ -522,28 +532,32 @@ goto error; - position = offset; - if (format != GST_FORMAT_DEFAULT) { - GstFormat fmt = GST_FORMAT_DEFAULT; - + my_format = GST_FORMAT_TIME; + if (format != GST_FORMAT_TIME) { if (!gst_pad_convert (GST_PAD_PEER (pad), format, - offset, &fmt, &position)) + offset, &my_format, &position)) + } else { + position = offset; + if (!gst_ogg_demux_src_query (pad, GST_QUERY_TOTAL, &my_format, &total)) + goto error; if (position < 0) position = 0; - else if (position > cur->length - cur->start) - position = cur->length - cur->start; + else if (position > total) + position = total; + g_print ("Seek to %lld (%llu) of %lld\n", position, offset, total); if (gst_file_pad_seek (ogg->sinkpad, - gst_file_pad_get_length (ogg->sinkpad) * position / - (cur->length - cur->start), GST_SEEK_METHOD_SET) != 0) + gst_file_pad_get_length (ogg->sinkpad) * + ((gdouble) position) / ((gdouble) total), + GST_SEEK_METHOD_SET) != 0) goto error; ogg_sync_clear (&ogg->sync); GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, offset); @@ -616,7 +630,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); default: gst_pad_event_default (pad, event); @@ -902,7 +917,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1031,7 +1047,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1363,6 +1380,9 @@ * the packet just fine. We should probably send a DISCONT though. */ case 1:{ + gint64 pos = -1, base = -1; + GstFormat fmt = GST_FORMAT_TIME; /* only push data when playing, not during seek or similar */ if (ogg->state != GST_OGG_STATE_PLAY) continue; @@ -1402,12 +1422,27 @@ pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; pad->packetno = packet.packetno + 1; + if (pad->known_offset != -1) + gst_pad_convert (GST_PAD_PEER (pad->pad), + GST_FORMAT_DEFAULT, pad->known_offset, &fmt, &pos); + if (pad->start != -1) + GST_FORMAT_DEFAULT, pad->start, &fmt, &base); + if (pos != -1 && base != -1) { + pos -= base; + fmt = GST_FORMAT_DEFAULT; + GST_FORMAT_TIME, pos, &fmt, &pos); + } else + pos = -1; /* send discont if needed */ - if ((pad->flags & GST_OGG_PAD_NEEDS_DISCONT) + if (pos != -1 && (pad->flags & GST_OGG_PAD_NEEDS_DISCONT) && GST_PAD_IS_USABLE (pad->pad)) { GstEvent *event = gst_event_new_discontinuous (FALSE, - GST_FORMAT_DEFAULT, pad->known_offset - pad->start, - GST_FORMAT_UNDEFINED); + GST_FORMAT_DEFAULT, pos, GST_FORMAT_UNDEFINED); /* FIXME: this might be wrong because we can only use the last * known offset */ @@ -1422,8 +1457,8 @@ memcpy (buf->data, packet.packet, packet.bytes); if (pad->offset != -1) GST_BUFFER_OFFSET (buf) = pad->offset; - if (packet.granulepos != -1) - GST_BUFFER_OFFSET_END (buf) = packet.granulepos - pad->start; + if (packet.granulepos != -1 && pos != -1) + GST_BUFFER_OFFSET_END (buf) = pos; pad->offset = packet.granulepos; if (GST_PAD_IS_USABLE (pad->pad)) gst_pad_push (pad->pad, GST_DATA (buf)); |
From: <rb...@fr...> - 2004-10-22 11:11:48
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Fri Oct 22 2004 04:11:41 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate): Handle files with missing EOS headers. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1188&r2=1.1189 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.44&r2=1.45 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1188 retrieving revision 1.1189 diff -u -d -r1.1188 -r1.1189 --- ChangeLog 21 Oct 2004 10:53:20 -0000 1.1188 +++ ChangeLog 22 Oct 2004 11:11:28 -0000 1.1189 @@ -1,3 +1,8 @@ +2004-10-22 Ronald S. Bultje <rb...@ro...> + + * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate): + Handle files with missing EOS headers. 2004-10-21 Zaheer Abbas Merali <zaheerabbas at merali dot org> * gst/tcp/gsttcpserversink.c: Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -d -r1.44 -r1.45 --- gstoggdemux.c 20 Oct 2004 16:24:18 -0000 1.44 +++ gstoggdemux.c 22 Oct 2004 11:11:28 -0000 1.45 @@ -557,10 +557,12 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -634,7 +636,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -920,7 +923,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1049,7 +1053,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1122,7 +1127,8 @@ } else { GST_DEBUG_OBJECT (ogg, "no data available, doing nothing"); } - return; + if (ogg->state != GST_OGG_STATE_SETUP) + return; GST_LOG_OBJECT (ogg, "queueing next %u bytes of data", available); data = (guint8 *) ogg_sync_buffer (&ogg->sync, available); |
From: <rb...@fr...> - 2004-10-22 13:09:27
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Fri Oct 22 2004 06:09:24 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): We love it if files that start at zero work too... Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1189&r2=1.1190 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.45&r2=1.46 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1189 retrieving revision 1.1190 diff -u -d -r1.1189 -r1.1190 --- ChangeLog 22 Oct 2004 11:11:28 -0000 1.1189 +++ ChangeLog 22 Oct 2004 13:09:12 -0000 1.1190 @@ -1,5 +1,10 @@ 2004-10-22 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): + We love it if files that start at zero work too... + +2004-10-22 Ronald S. Bultje <rb...@ro...> * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate): Handle files with missing EOS headers. Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.45 retrieving revision 1.46 diff -u -d -r1.45 -r1.46 --- gstoggdemux.c 22 Oct 2004 11:11:28 -0000 1.45 +++ gstoggdemux.c 22 Oct 2004 13:09:12 -0000 1.46 @@ -557,12 +557,10 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; - ); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; - ); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -636,8 +634,7 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -923,8 +920,7 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); - ); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1053,8 +1049,7 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset); - ); + endpos = MIN (endpos, pad->start_offset);); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1430,20 +1425,24 @@ } if (pad->known_offset != -1) - gst_pad_convert (GST_PAD_PEER (pad->pad), - GST_FORMAT_DEFAULT, pad->known_offset, &fmt, &pos); + if (!gst_pad_convert (GST_PAD_PEER (pad->pad), + GST_FORMAT_DEFAULT, pad->known_offset, &fmt, &pos)) + pos = -1; if (pad->start != -1) - GST_FORMAT_DEFAULT, pad->start, &fmt, &base); + GST_FORMAT_DEFAULT, pad->start, &fmt, &base)) + base = -1; if (pos != -1 && base != -1) { pos -= base; + if (pos < 0) + pos = 0; fmt = GST_FORMAT_DEFAULT; gst_pad_convert (GST_PAD_PEER (pad->pad), GST_FORMAT_TIME, pos, &fmt, &pos); - } else + } else { pos = -1; + } - /* send flush if needed */ if ((pad->flags & GST_OGG_PAD_NEEDS_FLUSH) && GST_PAD_IS_USABLE (pad->pad)) { gst_pad_push (pad->pad, GST_DATA (gst_event_new (GST_EVENT_FLUSH))); |
From: <rb...@fr...> - 2004-10-23 10:06:49
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Sat Oct 23 2004 03:06:44 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query), (gst_ogg_demux_src_event), (_find_chain_seek), (gst_ogg_pad_push): Check for pad availability before using it. * ext/ogg/gstoggdemux.c: (_find_chain_process): Fix parsing of chained ogg. Needs more work on the decoder side. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1191&r2=1.1192 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.46&r2=1.47 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1191 retrieving revision 1.1192 diff -u -d -r1.1191 -r1.1192 --- ChangeLog 22 Oct 2004 20:09:55 -0000 1.1191 +++ ChangeLog 23 Oct 2004 10:06:31 -0000 1.1192 @@ -1,3 +1,12 @@ +2004-10-23 Ronald S. Bultje <rb...@ro...> + + * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query), + (gst_ogg_demux_src_event), (_find_chain_seek), + (gst_ogg_pad_push): + Check for pad availability before using it. + * ext/ogg/gstoggdemux.c: (_find_chain_process): + Fix parsing of chained ogg. Needs more work on the decoder side. 2004-10-22 Benjamin Otte <in...@pu...> * gst/spectrum/Makefile.am: Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -d -r1.46 -r1.47 --- gstoggdemux.c 22 Oct 2004 13:09:12 -0000 1.46 +++ gstoggdemux.c 23 Oct 2004 10:06:32 -0000 1.47 @@ -428,7 +428,8 @@ guint64 base, time; /* subtract base */ - if (!gst_pad_convert (GST_PAD_PEER (pad), + if (!GST_PAD_PEER (pad) || + !gst_pad_convert (GST_PAD_PEER (pad), GST_FORMAT_DEFAULT, granulepos, &fmt, &time) || !gst_pad_convert (GST_PAD_PEER (pad), GST_FORMAT_DEFAULT, cur->start, &fmt, &base)) @@ -536,7 +537,8 @@ my_format = GST_FORMAT_TIME; if (format != GST_FORMAT_TIME) { - if (!gst_pad_convert (GST_PAD_PEER (pad), format, + if (!GST_PAD_PEER (pad) || + !gst_pad_convert (GST_PAD_PEER (pad), format, offset, &my_format, &position)) goto error; } else { @@ -557,10 +559,12 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -634,7 +638,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -920,7 +925,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -986,7 +992,6 @@ return FALSE; } } else { - ogg->seek_skipped = 0; if (!gst_ogg_demux_seek_before (ogg, (start + end) / 2, start)) return FALSE; } @@ -1014,6 +1019,7 @@ if (!_find_chain_get_unknown_part (ogg, &start, &end)) return FALSE; if (ogg->seek_to <= start && gst_ogg_demux_position (ogg) > end) { /* we now should have the first bos page, because * - we seeked to a point in the known chain @@ -1049,7 +1055,8 @@ endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1424,11 +1431,11 @@ pad->packetno = packet.packetno + 1; } - if (pad->known_offset != -1) + if (pad->known_offset != -1 && GST_PAD_PEER (pad->pad)) if (!gst_pad_convert (GST_PAD_PEER (pad->pad), GST_FORMAT_DEFAULT, pad->known_offset, &fmt, &pos)) pos = -1; - if (pad->start != -1) + if (pad->start != -1 && GST_PAD_PEER (pad->pad)) GST_FORMAT_DEFAULT, pad->start, &fmt, &base)) base = -1; |
From: <rb...@fr...> - 2004-10-29 15:59:51
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Fri Oct 29 2004 08:59:49 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event), (gst_ogg_demux_push): Make seeking sort-of exact again (fixes #156387). Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1231&r2=1.1232 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.50&r2=1.51 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1231 retrieving revision 1.1232 diff -u -d -r1.1231 -r1.1232 --- ChangeLog 29 Oct 2004 15:27:09 -0000 1.1231 +++ ChangeLog 29 Oct 2004 15:59:37 -0000 1.1232 @@ -1,5 +1,11 @@ 2004-10-29 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event), + (gst_ogg_demux_push): + Make seeking sort-of exact again (fixes #156387). + +2004-10-29 Ronald S. Bultje <rb...@ro...> * gst/playback/gstplaybasebin.c: (unknown_type), (add_element_stream), (new_decoded_pad), (gst_play_base_bin_change_state): Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- gstoggdemux.c 26 Oct 2004 14:41:06 -0000 1.50 +++ gstoggdemux.c 29 Oct 2004 15:59:37 -0000 1.51 @@ -154,7 +154,9 @@ GstOggPad *seek_pad; gint64 seek_to; gint64 seek_skipped; + guint64 seek_offset; GstFormat seek_format; + gint seek_try; }; struct _GstOggDemuxClass @@ -486,7 +488,7 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: { - gint64 offset, position, total; + gint64 offset, position, total, seek_offset; GstFormat format, my_format; gboolean res; @@ -550,19 +552,22 @@ position = 0; else if (position > total) position = total; - if (gst_file_pad_seek (ogg->sinkpad, - gst_file_pad_get_length (ogg->sinkpad) * - ((gdouble) position) / ((gdouble) total), + seek_offset = gst_file_pad_get_length (ogg->sinkpad) * + ((gdouble) position) / ((gdouble) total); + if (gst_file_pad_seek (ogg->sinkpad, seek_offset, GST_SEEK_METHOD_SET) != 0) goto error; + ogg->seek_try = 1; ogg_sync_clear (&ogg->sync); - GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); + GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -570,8 +575,9 @@ /* store format and position we seek to */ ogg->seek_pad = cur; - ogg->seek_to = offset; - ogg->seek_format = format; + ogg->seek_to = position; + ogg->seek_format = GST_FORMAT_TIME; + ogg->seek_offset = seek_offset; gst_event_unref (event); return TRUE; @@ -636,7 +642,8 @@ GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -922,7 +929,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1051,7 +1059,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1324,29 +1333,65 @@ "in seek - offset now: %" G_GUINT64_FORMAT " (pad %d) - desired offset %" G_GUINT64_FORMAT " (pad %d)", cur->known_offset, cur->serial, ogg->seek_to, ogg->seek_pad->serial); - if (cur == ogg->seek_pad) { - gint64 position; + if (cur != ogg->seek_pad) { + break; + } else { + gint64 position, diff, start; + gdouble ratio; + if (ogg->seek_try > 5) { + GST_DEBUG ("Seeking took too long, continuing with current page"); + goto play; + } position = ogg_page_granulepos (page); /* see if we reached the destination position when seeking */ if (ogg->seek_format != GST_FORMAT_DEFAULT) { if (GST_PAD_PEER (cur->pad) - && !gst_pad_convert (GST_PAD_PEER (cur->pad), GST_FORMAT_DEFAULT, - position, &ogg->seek_format, &position)) { + && (!gst_pad_convert (GST_PAD_PEER (cur->pad), + GST_FORMAT_DEFAULT, + position, &ogg->seek_format, &position) || + !gst_pad_convert (GST_PAD_PEER (cur->pad), + cur->start, &ogg->seek_format, &start))) { /* let's just stop then */ - position = G_MAXINT64; + goto play; } } - if (position >= ogg->seek_to) { - GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); - GST_DEBUG_OBJECT (ogg, - "ended seek at offset %" G_GUINT64_FORMAT " (requested %" - G_GUINT64_FORMAT, cur->known_offset, ogg->seek_to); - ogg->seek_pad = NULL; - ogg->seek_to = 0; + /* fairly random treshold. */ + position -= start; + if (ogg->seek_to > position) + diff = ogg->seek_to - position; + else + diff = position - ogg->seek_to; + if (diff < GST_SECOND) { + GST_DEBUG ("Close enough (%" GST_TIME_FORMAT " seconds off)", + GST_TIME_ARGS (diff)); + /* seek again! yay */ + ratio = (gdouble) ogg->seek_to / position; + ogg->seek_offset = ogg->seek_offset * ratio; + if (gst_file_pad_seek (ogg->sinkpad, ogg->seek_offset, + GST_SEEK_METHOD_SET) != 0) { + ogg->seek_try++; + ogg_sync_clear (&ogg->sync); + return; + play: + GST_OGG_SET_STATE (ogg, GST_OGG_STATE_PLAY); + GST_DEBUG_OBJECT (ogg, + "ended seek at offset %" G_GUINT64_FORMAT " (requested %" + G_GUINT64_FORMAT, cur->known_offset, ogg->seek_to); + ogg->seek_pad = NULL; + ogg->seek_to = 0; + ogg->seek_try = 0; /* fallthrough */ case GST_OGG_STATE_PLAY: |
From: <rb...@fr...> - 2004-10-29 16:18:30
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Fri Oct 29 2004 09:18:21 PDT Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push), (gst_ogg_pad_push): Synchronized discont handling. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1232&r2=1.1233 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.51&r2=1.52 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1232 retrieving revision 1.1233 diff -u -d -r1.1232 -r1.1233 --- ChangeLog 29 Oct 2004 15:59:37 -0000 1.1232 +++ ChangeLog 29 Oct 2004 16:18:08 -0000 1.1233 @@ -1,5 +1,10 @@ 2004-10-29 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push), (gst_ogg_pad_push): + Synchronized discont handling. + +2004-10-29 Ronald S. Bultje <rb...@ro...> * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event), (gst_ogg_demux_push): Make seeking sort-of exact again (fixes #156387). Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -d -r1.51 -r1.52 --- gstoggdemux.c 29 Oct 2004 15:59:37 -0000 1.51 +++ gstoggdemux.c 29 Oct 2004 16:18:08 -0000 1.52 @@ -562,12 +562,10 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; - ); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; - ); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -642,8 +640,7 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -929,8 +926,7 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); - ); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1059,8 +1055,7 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset); - ); + endpos = MIN (endpos, pad->start_offset);); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1390,7 +1385,7 @@ "ended seek at offset %" G_GUINT64_FORMAT " (requested %" G_GUINT64_FORMAT, cur->known_offset, ogg->seek_to); ogg->seek_pad = NULL; - ogg->seek_to = 0; + ogg->seek_offset = 0; ogg->seek_try = 0; /* fallthrough */ @@ -1503,8 +1498,21 @@ /* send discont if needed */ if (pos != -1 && (pad->flags & GST_OGG_PAD_NEEDS_DISCONT) && GST_PAD_IS_USABLE (pad->pad)) { - GstEvent *event = gst_event_new_discontinuous (FALSE, - GST_FORMAT_DEFAULT, pos, GST_FORMAT_UNDEFINED); + /* so in order to synchronized the variety of streams, we will + * not use the granpos but the last seekpos for the discont. */ + GstEvent *event; + gint64 discont; + fmt = GST_FORMAT_DEFAULT; + if (!GST_PAD_PEER (pad->pad) || + !gst_pad_convert (GST_PAD_PEER (pad->pad), + ogg->seek_format, ogg->seek_to, &fmt, &discont)) { + event = gst_event_new_discontinuous (FALSE, + ogg->seek_format, ogg->seek_to, GST_FORMAT_UNDEFINED); + } else { + GST_FORMAT_DEFAULT, discont, GST_FORMAT_UNDEFINED); + } /* FIXME: this might be wrong because we can only use the last * known offset */ |
From: <rb...@fr...> - 2004-10-31 15:33:58
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Sun Oct 31 2004 07:33:55 PST Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): Hack to prevent crash when going to READY inside signal handler while this function is active. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1238&r2=1.1239 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.52&r2=1.53 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1238 retrieving revision 1.1239 diff -u -d -r1.1238 -r1.1239 --- ChangeLog 31 Oct 2004 14:33:17 -0000 1.1238 +++ ChangeLog 31 Oct 2004 15:33:43 -0000 1.1239 @@ -1,5 +1,11 @@ 2004-10-31 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): + Hack to prevent crash when going to READY inside signal handler + while this function is active. + +2004-10-31 Ronald S. Bultje <rb...@ro...> * gst/ffmpegcolorspace/Makefile.am: * gst/ffmpegcolorspace/avcodec.h: * gst/ffmpegcolorspace/common.h: Index: gstoggdemux.c RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -d -r1.52 -r1.53 --- gstoggdemux.c 29 Oct 2004 16:18:08 -0000 1.52 +++ gstoggdemux.c 31 Oct 2004 15:33:43 -0000 1.53 @@ -562,10 +562,12 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -640,7 +642,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -926,7 +929,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1055,7 +1059,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1416,7 +1421,10 @@ int ret; GstBuffer *buf; - while (TRUE) { + /* Hack. If someone connects to the push (or any related) signal and + * goes to READY, the pad will be destroyed and the next line will + * segfault. This does not work on PLAY -> READY -> PLAY. */ + while (GST_STATE (ogg) >= GST_STATE_PAUSED) { ret = ogg_stream_packetout (&pad->stream, &packet); GST_LOG_OBJECT (ogg, "packetout gave %d", ret); switch (ret) { |
From: <rb...@fr...> - 2004-11-07 14:04:04
|
CVS Root: /home/cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Sun Nov 07 2004 06:04:03 PST Log message: * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer), (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop): Fix interrupt event handling (#144436). Modified files: . : ChangeLog ext/ogg : gstoggmux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1263&r2=1.1264 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggmux.c.diff?r1=1.20&r2=1.21 ====Begin Diffs==== Index: gstoggmux.c =================================================================== RCS file: /home/cvs/gstreamer/gst-plugins/ext/ogg/gstoggmux.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- gstoggmux.c 24 Oct 2004 13:41:17 -0000 1.20 +++ gstoggmux.c 7 Nov 2004 14:03:51 -0000 1.21 @@ -409,7 +409,7 @@ } static GstBuffer * -gst_ogg_mux_next_buffer (GstOggPad * pad) +gst_ogg_mux_next_buffer (GstOggPad * pad, gboolean * interrupt) { GstData *data = NULL; @@ -430,6 +430,9 @@ pad->eos = TRUE; gst_event_unref (event); return NULL; + case GST_EVENT_INTERRUPT: + *interrupt = TRUE; + return NULL; case GST_EVENT_DISCONTINUOUS: { guint64 value; @@ -560,7 +563,7 @@ /* make sure a buffer is queued on all pads, returns a pointer to an oggpad * that holds the best buffer or NULL when no pad was usable */ static GstOggPad * -gst_ogg_mux_queue_pads (GstOggMux * ogg_mux) +gst_ogg_mux_queue_pads (GstOggMux * ogg_mux, gboolean * interrupt) GstOggPad *bestpad = NULL; GSList *walk; @@ -577,7 +580,9 @@ /* try to get a new buffer for this pad if needed and possible */ if (pad->buffer == NULL && GST_PAD_IS_USABLE (pad->pad)) { - pad->buffer = gst_ogg_mux_next_buffer (pad); + pad->buffer = gst_ogg_mux_next_buffer (pad, interrupt); + if (*interrupt) + return NULL; /* no next buffer, try another pad */ if (pad->buffer == NULL) continue; @@ -850,11 +855,13 @@ GstOggMux *ogg_mux; GstOggPad *best; gboolean delta_unit; + gboolean interrupt = FALSE; ogg_mux = GST_OGG_MUX (element); - best = gst_ogg_mux_queue_pads (ogg_mux); - + best = gst_ogg_mux_queue_pads (ogg_mux, &interrupt); + if (interrupt) + return; /* we're pulling a pad and there is a better one, see if we need * to flush the current page */ @@ -916,7 +923,9 @@ buf = pad->buffer; if (buf == NULL) { /* no buffer, get one, and store in the pad so we free it later on */ - buf = pad->buffer = gst_ogg_mux_next_buffer (pad); + buf = pad->buffer = gst_ogg_mux_next_buffer (pad, &interrupt); + if (interrupt) + return; /* data exhausted on this pad (EOS) */ if (buf == NULL) { /* stop pulling from the pad */ @@ -939,7 +948,9 @@ packet.packetno = pad->packetno++; /* read ahead one more buffer to find EOS */ - tmpbuf = gst_ogg_mux_next_buffer (pad); + tmpbuf = gst_ogg_mux_next_buffer (pad, &interrupt); + if (interrupt) + return; /* data exhausted on this pad */ if (tmpbuf == NULL) { /* stop pulling from the pad */ Index: ChangeLog RCS file: /home/cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1263 retrieving revision 1.1264 diff -u -d -r1.1263 -r1.1264 --- ChangeLog 6 Nov 2004 23:53:13 -0000 1.1263 +++ ChangeLog 7 Nov 2004 14:03:50 -0000 1.1264 @@ -1,5 +1,11 @@ 2004-11-07 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer), + (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop): + Fix interrupt event handling (#144436). + +2004-11-07 Ronald S. Bultje <rb...@ro...> * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind): Hide unused glory. |
From: <rb...@fr...> - 2004-11-25 20:31:17
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Thu Nov 25 2004 12:31:34 PST Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push): Fix position for discont if we're close as well. Nitpicking, but saves a few milliseconds of extra waiting or skipping. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1319&r2=1.1320 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.59&r2=1.60 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1319 retrieving revision 1.1320 diff -u -d -r1.1319 -r1.1320 --- ChangeLog 25 Nov 2004 20:22:12 -0000 1.1319 +++ ChangeLog 25 Nov 2004 20:31:22 -0000 1.1320 @@ -1,5 +1,11 @@ 2004-11-25 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push): + Fix position for discont if we're close as well. Nitpicking, but + saves a few milliseconds of extra waiting or skipping. + +2004-11-25 Ronald S. Bultje <rb...@ro...> * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter): We sometimes need parsers for playback, so add those too. Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -d -r1.59 -r1.60 --- gstoggdemux.c 23 Nov 2004 15:24:28 -0000 1.59 +++ gstoggdemux.c 25 Nov 2004 20:31:22 -0000 1.60 @@ -614,10 +614,12 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -692,7 +694,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -978,7 +981,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1107,7 +1111,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1404,6 +1409,7 @@ if (diff < GST_SECOND) { GST_DEBUG ("Close enough (%" GST_TIME_FORMAT " seconds off)", GST_TIME_ARGS (diff)); + ogg->seek_to = position; goto play; } |
From: <rb...@fr...> - 2004-12-01 21:45:09
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Wed Dec 01 2004 13:45:39 PST Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_type_find): Yay, another one. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1354&r2=1.1355 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.60&r2=1.61 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1354 retrieving revision 1.1355 diff -u -d -r1.1354 -r1.1355 --- ChangeLog 1 Dec 2004 20:42:00 -0000 1.1354 +++ ChangeLog 1 Dec 2004 21:45:27 -0000 1.1355 @@ -1,5 +1,10 @@ 2004-12-01 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_type_find): + Yay, another one. + +2004-12-01 Ronald S. Bultje <rb...@ro...> * ext/esd/esdsink.c: (gst_esdsink_chain): Make error actually say something useful (fixes #156798). * gst-libs/gst/riff/riff-media.c: Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -d -r1.60 -r1.61 --- gstoggdemux.c 25 Nov 2004 20:31:22 -0000 1.60 +++ gstoggdemux.c 1 Dec 2004 21:45:27 -0000 1.61 @@ -614,12 +614,10 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; - ); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; - ); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -694,8 +692,7 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -981,8 +978,7 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); - ); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1111,8 +1107,7 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset); - ); + endpos = MIN (endpos, pad->start_offset);); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1699,6 +1694,7 @@ 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); |
From: <rb...@fr...> - 2004-12-08 22:20:15
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Wed Dec 08 2004 14:20:37 PST Log message: * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain): We love wrong commas. Modified files: . : ChangeLog ext/ogg : gstogmparse.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1368&r2=1.1369 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstogmparse.c.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1368 retrieving revision 1.1369 diff -u -d -r1.1368 -r1.1369 --- ChangeLog 8 Dec 2004 22:12:13 -0000 1.1368 +++ ChangeLog 8 Dec 2004 22:20:25 -0000 1.1369 @@ -1,5 +1,10 @@ 2004-12-08 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain): + We love wrong commas. + +2004-12-08 Ronald S. Bultje <rb...@ro...> * gst/matroska/matroska-demux.c: (gst_matroska_demux_handle_src_query): Don't set DEFAULT, unsupported - makes length display incorrectly Index: gstogmparse.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstogmparse.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstogmparse.c 23 Sep 2004 14:59:21 -0000 1.2 +++ gstogmparse.c 8 Dec 2004 22:20:25 -0000 1.3 @@ -432,7 +432,7 @@ fcc = GST_MAKE_FOURCC (ogm->hdr.subtype[0], ogm->hdr.subtype[1], ogm->hdr.subtype[2], ogm->hdr.subtype[3]); - GST_LOG_OBJECT (ogm, "Type: %s, subtype: %" GST_FOURCC_FORMAT + GST_LOG_OBJECT (ogm, "Type: %s, subtype: " GST_FOURCC_FORMAT ", size: %dx%d, timeunit: %" G_GINT64_FORMAT " (fps: %lf), s/u: %" G_GINT64_FORMAT ", " "def.len: %d, bufsize: %d, bps: %d", |
From: <rb...@fr...> - 2004-12-09 15:56:57
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Thu Dec 09 2004 07:57:52 PST Log message: * ext/ogg/gstoggdemux.c: (get_relative): Check for non-NULL before accessing member (end-of-chain). Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1372&r2=1.1373 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.61&r2=1.62 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1372 retrieving revision 1.1373 diff -u -d -r1.1372 -r1.1373 --- ChangeLog 9 Dec 2004 12:57:28 -0000 1.1372 +++ ChangeLog 9 Dec 2004 15:57:39 -0000 1.1373 @@ -1,5 +1,10 @@ 2004-12-09 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (get_relative): + Check for non-NULL before accessing member (end-of-chain). + +2004-12-09 Ronald S. Bultje <rb...@ro...> * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init), (cdparanoia_set_property), (cdparanoia_get_property): * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init), Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- gstoggdemux.c 1 Dec 2004 21:45:27 -0000 1.61 +++ gstoggdemux.c 9 Dec 2004 15:57:39 -0000 1.62 @@ -417,7 +417,7 @@ /* get base for this chain */ FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - if (pad->start != -1 && + if (pad->start != -1 && pad->pad && GST_PAD_PEER (pad->pad) && gst_pad_convert (GST_PAD_PEER (pad->pad), GST_FORMAT_DEFAULT, pad->start, @@ -614,10 +614,12 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -692,7 +694,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -978,7 +981,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1107,7 +1111,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ |
From: <rb...@fr...> - 2005-02-15 15:58:29
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Tue Feb 15 2005 07:58:27 PST Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_populate): Granpos can apparently be -1, which screws up calculations... Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1626&r2=1.1627 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.64&r2=1.65 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1626 retrieving revision 1.1627 diff -u -d -r1.1626 -r1.1627 --- ChangeLog 15 Feb 2005 14:12:11 -0000 1.1626 +++ ChangeLog 15 Feb 2005 15:58:14 -0000 1.1627 @@ -1,3 +1,8 @@ +2005-02-15 Ronald S. Bultje <rb...@ro...> + + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_populate): + Granpos can apparently be -1, which screws up calculations... 2005-02-16 Jan Schmidt <th...@ma...> * sys/ximage/ximagesink.c: (gst_ximagesink_chain), Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- gstoggdemux.c 25 Jan 2005 15:34:08 -0000 1.64 +++ gstoggdemux.c 15 Feb 2005 15:58:15 -0000 1.65 @@ -614,12 +614,10 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; - ); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; - ); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -694,8 +692,7 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -777,13 +774,12 @@ static void gst_ogg_pad_populate (GstOggDemux * ogg, GstOggPad * pad, ogg_page * page) { - gint64 start, end; + gint64 start, end, granpos = ogg_page_granulepos (page); - if (pad->start > ogg_page_granulepos (page) && ogg_page_granulepos (page) > 0) { - pad->start = ogg_page_granulepos (page); - } - if (pad->length < ogg_page_granulepos (page)) - pad->length = ogg_page_granulepos (page); + if (pad->start > granpos && granpos > 0) + pad->start = granpos; + if (pad->length < granpos && granpos > 0) + pad->length = granpos; if (pad->pages < ogg_page_pageno (page)) pad->pages = ogg_page_pageno (page); end = gst_ogg_demux_position (ogg); @@ -981,8 +977,7 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); - ); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1111,8 +1106,7 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset); - ); + endpos = MIN (endpos, pad->start_offset);); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ |
From: <rb...@fr...> - 2005-03-12 22:47:20
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Sat Mar 12 2005 14:47:16 PST Branch: BRANCH-GSTREAMER-0_8 Log message: Reviewed by: Ronald S. Bultje <rb...@ro...> * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): Fix memleak (#170066). Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1641.2.35&r2=1.1641.2.36 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.65.2.1&r2=1.65.2.2 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1641.2.35 retrieving revision 1.1641.2.36 diff -u -d -r1.1641.2.35 -r1.1641.2.36 --- ChangeLog 12 Mar 2005 22:44:40 -0000 1.1641.2.35 +++ ChangeLog 12 Mar 2005 22:47:03 -0000 1.1641.2.36 @@ -1,3 +1,10 @@ +2005-03-12 Richard Hult <ri...@im...> + + Reviewed by: Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): + Fix memleak (#170066). 2005-03-12 Gergely Nagy <alg...@bo...> Reviewed by: Ronald S. Bultje <rb...@ro...> Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.65.2.1 retrieving revision 1.65.2.2 diff -u -d -r1.65.2.1 -r1.65.2.2 --- gstoggdemux.c 9 Mar 2005 12:06:55 -0000 1.65.2.1 +++ gstoggdemux.c 12 Mar 2005 22:47:03 -0000 1.65.2.2 @@ -614,12 +614,10 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; - ); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; - ); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -694,8 +692,7 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -981,8 +978,7 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); - ); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1111,8 +1107,7 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset); - ); + endpos = MIN (endpos, pad->start_offset);); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1613,6 +1608,8 @@ gst_ogg_sync (ogg, pad); if (GST_PAD_IS_USABLE (pad->pad)) gst_pad_push (pad->pad, GST_DATA (buf)); + else + gst_buffer_unref (buf); break; default: |
From: <rb...@fr...> - 2005-04-02 09:34:51
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Sat Apr 02 2005 01:34:44 PST Branch: BRANCH-GSTREAMER-0_8 Log message: * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain): Export codec-name for OGM tracks as well. Modified files: . : ChangeLog ext/ogg : gstogmparse.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1641.2.73&r2=1.1641.2.74 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstogmparse.c.diff?r1=1.6.2.1&r2=1.6.2.2 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1641.2.73 retrieving revision 1.1641.2.74 diff -u -d -r1.1641.2.73 -r1.1641.2.74 --- ChangeLog 2 Apr 2005 08:18:04 -0000 1.1641.2.73 +++ ChangeLog 2 Apr 2005 09:34:32 -0000 1.1641.2.74 @@ -1,5 +1,10 @@ 2005-04-02 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain): + Export codec-name for OGM tracks as well. + +2005-04-02 Ronald S. Bultje <rb...@ro...> * gst/speed/gstspeed.c: (speed_chain): Fix buffer overflow (#172281). Index: gstogmparse.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstogmparse.c,v retrieving revision 1.6.2.1 retrieving revision 1.6.2.2 diff -u -d -r1.6.2.1 -r1.6.2.2 --- gstogmparse.c 31 Mar 2005 15:53:40 -0000 1.6.2.1 +++ gstogmparse.c 2 Apr 2005 09:34:32 -0000 1.6.2.2 @@ -547,6 +547,7 @@ switch (data[0]) { case 0x01:{ GstCaps *caps = NULL; + gchar *codec_name = NULL; /* stream header */ if (size < sizeof (stream_header) + 1) { @@ -586,7 +587,7 @@ caps = NULL; break; } - caps = gst_riff_create_audio_caps (codec_id, NULL, NULL, NULL); + caps = gst_riff_create_audio_caps (codec_id, NULL, NULL, &codec_name); gst_caps_set_simple (caps, "channels", G_TYPE_INT, ogm->hdr.s.audio.channels, "rate", G_TYPE_INT, ogm->hdr.samples_per_unit, NULL); @@ -611,7 +612,7 @@ ogm->hdr.time_unit, 10000000. / ogm->hdr.time_unit, ogm->hdr.samples_per_unit, ogm->hdr.default_len, ogm->hdr.buffersize, ogm->hdr.bits_per_sample); - caps = gst_riff_create_video_caps (fcc, NULL, NULL, NULL); + caps = gst_riff_create_video_caps (fcc, NULL, NULL, &codec_name); "width", G_TYPE_INT, ogm->hdr.s.video.width, "height", G_TYPE_INT, ogm->hdr.s.video.height, @@ -638,6 +639,16 @@ break; } gst_element_add_pad (GST_ELEMENT (ogm), ogm->srcpad); + if (codec_name) { + GstTagList *list = gst_tag_list_new (); + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, + (ogm->hdr.streamtype[0] == 'a') ? + GST_TAG_AUDIO_CODEC : GST_TAG_VIDEO_CODEC, codec_name, NULL); + gst_element_found_tags_for_pad (GST_ELEMENT (ogm), + ogm->srcpad, 0, list); + g_free (codec_name); + } break; } case 0x03: |
From: <rb...@fr...> - 2005-04-25 17:41:14
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Tue Apr 26 2005 03:41:07 EST Branch: BRANCH-GSTREAMER-0_8 Log message: * ext/ogg/gstoggdemux.c: (get_relative), (gst_ogg_pad_new), (gst_ogg_demux_push), (gst_ogg_sync): Cache start-time values; flush ogg-streams after each re-seek to make sure we don't handle cached samples (which make it hang further on). Fixes #171777. Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1641.2.135&r2=1.1641.2.136 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.65.2.3&r2=1.65.2.4 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1641.2.135 retrieving revision 1.1641.2.136 diff -u -d -r1.1641.2.135 -r1.1641.2.136 --- ChangeLog 25 Apr 2005 14:19:08 -0000 1.1641.2.135 +++ ChangeLog 25 Apr 2005 17:40:48 -0000 1.1641.2.136 @@ -1,3 +1,11 @@ +2005-04-25 Ronald S. Bultje <rb...@ro...> + + * ext/ogg/gstoggdemux.c: (get_relative), (gst_ogg_pad_new), + (gst_ogg_demux_push), (gst_ogg_sync): + Cache start-time values; flush ogg-streams after each re-seek + to make sure we don't handle cached samples (which make it + hang further on). Fixes #171777. 2005-04-25 jon...@ka... Reviewed by: Ronald S. Bultje <rb...@ro...> Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c,v retrieving revision 1.65.2.3 retrieving revision 1.65.2.4 diff -u -d -r1.65.2.3 -r1.65.2.4 --- gstoggdemux.c 31 Mar 2005 15:53:40 -0000 1.65.2.3 +++ gstoggdemux.c 25 Apr 2005 17:40:55 -0000 1.65.2.4 @@ -80,6 +80,7 @@ gint64 packetno; /* number of next expected packet */ guint64 start; /* first valid granulepos */ + guint64 start_time; /* cache conversion to time units */ guint64 length; /* length of stream or 0 */ glong pages; /* number of pages in stream or 0 */ @@ -417,12 +418,13 @@ /* get base for this chain */ FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - if (pad->start != -1 && pad->pad && - GST_PAD_PEER (pad->pad) && + if (pad->start_time == -1 && pad->start != -1 && + pad->pad && GST_PAD_PEER (pad->pad) && gst_pad_convert (GST_PAD_PEER (pad->pad), - GST_FORMAT_DEFAULT, pad->start, - &fmt, &tmp) && (start == -1 || tmp < start)) - start = tmp;); + GST_FORMAT_DEFAULT, pad->start, &fmt, &tmp)) { + pad->start_time = tmp;} + if (pad->start_time != -1 && (start == -1 || pad->start_time < start)) + start = pad->start_time;); if (start == -1) return -1; @@ -614,12 +616,10 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; - ); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; - ); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -694,8 +694,7 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -981,8 +980,7 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); - ); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1111,8 +1109,7 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset); - ); + endpos = MIN (endpos, pad->start_offset);); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1306,7 +1303,7 @@ GST_LOG_OBJECT (ogg, "created new ogg src %p for stream with serial %d", ret, serial); ret->start_offset = ret->end_offset = -1; - ret->start = -1; + ret->start = ret->start_time = -1; ret->start_found = ret->end_found = FALSE; ret->offset = GST_BUFFER_OFFSET_NONE; @@ -1388,6 +1385,7 @@ cur->known_offset, cur->serial, ogg->seek_to, ogg->seek_pad->serial); if (cur != ogg->seek_pad) { + ogg_stream_reset (&cur->stream); break; } else { gint64 position, diff; @@ -1429,6 +1427,7 @@ goto play; } ogg->seek_try++; + ogg_stream_reset (&ogg->seek_pad->stream); ogg_sync_clear (&ogg->sync); return; @@ -1501,7 +1500,8 @@ gint64 bias, time; GstFormat fmt = GST_FORMAT_TIME; - time = get_relative (ogg, cur, cur->offset, GST_FORMAT_TIME); + if ((time = get_relative (ogg, cur, cur->offset, GST_FORMAT_TIME)) == -1) + return; if (pad->pad && GST_PAD_PEER (pad->pad) && pad->offset != GST_BUFFER_OFFSET_NONE) { |
From: <rb...@fr...> - 2005-07-28 09:17:00
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Thu Jul 28 2005 02:16:59 PDT Branch: BRANCH-GSTREAMER-0_8 Log message: Reviewed by: Ronald S. Bultje <rb...@ro...> * ext/ogg/gstoggmux.c: (gst_ogg_mux_dequeue_page): Make sure pages are always in the right order, even when there is no granulepos on some packets, by using larger lookahead on queues until we find a timestamped packet (#311491). Modified files: . : ChangeLog ext/ogg : gstoggmux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1641.2.323&r2=1.1641.2.324 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggmux.c.diff?r1=1.22.2.4&r2=1.22.2.5 ====Begin Diffs==== Index: gstoggmux.c =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/gstoggmux.c,v retrieving revision 1.22.2.4 retrieving revision 1.22.2.5 diff -u -d -r1.22.2.4 -r1.22.2.5 --- gstoggmux.c 24 Jun 2005 17:33:23 -0000 1.22.2.4 +++ gstoggmux.c 28 Jul 2005 09:16:47 -0000 1.22.2.5 @@ -578,6 +578,10 @@ while (walk) { GstOggPad *pad = (GstOggPad *) walk->data; + /* We need each queue to either be at EOS, or have one or more pages + * available with a set granulepos (i.e. not -1), otherwise we don't have + * enough data yet to determine which stream needs to go next for correct + * time ordering. */ if (pad->pagebuffers->length == 0) { if (pad->eos) { GST_LOG_OBJECT (pad->pad, "pad is EOS, skipping for dequeue decision"); @@ -585,15 +589,31 @@ GST_LOG_OBJECT (pad->pad, "no pages in this queue, can't dequeue"); return FALSE; } + } else { + /* We then need to check for a non-negative granulepos */ + int i; + gboolean valid = FALSE; + + for (i = 0; i < pad->pagebuffers->length; i++) { + buf = g_queue_peek_nth (pad->pagebuffers, i); + if (GST_BUFFER_OFFSET_END (buf) != -1) { + valid = TRUE; + break; + } + } + if (!valid) { + GST_LOG_OBJECT (pad->pad, "No page timestamps in queue, can't dequeue"); + return FALSE; } walk = walk->next; } - /* any page with a granulepos of -1 can be pushed immediately */ walk = mux->sinkpads; + /* any page with a granulepos of -1 can be pushed immediately */ buf = g_queue_peek_head (pad->pagebuffers); while (buf && GST_BUFFER_OFFSET_END (buf) == -1) { GST_LOG_OBJECT (pad->pad, GST_GP_FORMAT " pushing page", -1); Index: ChangeLog RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1641.2.323 retrieving revision 1.1641.2.324 diff -u -d -r1.1641.2.323 -r1.1641.2.324 --- ChangeLog 27 Jul 2005 16:08:20 -0000 1.1641.2.323 +++ ChangeLog 28 Jul 2005 09:16:47 -0000 1.1641.2.324 @@ -1,3 +1,12 @@ +2005-07-28 Michael Smith <ms...@fl...> + Reviewed by: Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggmux.c: (gst_ogg_mux_dequeue_page): + Make sure pages are always in the right order, even when there + is no granulepos on some packets, by using larger lookahead on + queues until we find a timestamped packet (#311491). 2005-07-27 Wouter Paesen <wo...@ka...> Reviewed by: Ronald S. Bultje <rb...@ro...> |
From: <rb...@fr...> - 2005-08-16 10:44:35
|
CVS Root: /cvs/gstreamer Module: gst-plugins Changes by: rbultje Date: Tue Aug 16 2005 03:42:49 PDT Branch: BRANCH-GSTREAMER-0_8 Log message: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): Don't push empty pages (#313444). Modified files: . : ChangeLog ext/ogg : gstoggdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ChangeLog.diff?r1=1.1641.2.344&r2=1.1641.2.345 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins/ext/ogg/gstoggdemux.c.diff?r1=1.65.2.4&r2=1.65.2.5 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins/ChangeLog,v retrieving revision 1.1641.2.344 retrieving revision 1.1641.2.345 diff -u -d -r1.1641.2.344 -r1.1641.2.345 --- ChangeLog 16 Aug 2005 10:11:40 -0000 1.1641.2.344 +++ ChangeLog 16 Aug 2005 10:42:37 -0000 1.1641.2.345 @@ -1,5 +1,10 @@ 2005-08-16 Ronald S. Bultje <rb...@ro...> + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push): + Don't push empty pages (#313444). + +2005-08-16 Ronald S. Bultje <rb...@ro...> * ext/esd/esdsink.c: (gst_esdsink_change_state): Reset on pause->ready (#313600). Index: gstoggdemux.c RCS file: /cvs/gstreamer/gst-plugins/ext/ogg/Attic/gstoggdemux.c,v retrieving revision 1.65.2.4 retrieving revision 1.65.2.5 diff -u -d -r1.65.2.4 -r1.65.2.5 --- gstoggdemux.c 25 Apr 2005 17:40:55 -0000 1.65.2.4 +++ gstoggdemux.c 16 Aug 2005 10:42:37 -0000 1.65.2.5 @@ -616,10 +616,12 @@ GST_OGG_SET_STATE (ogg, GST_OGG_STATE_SEEK); FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_DISCONT;); + pad->flags |= GST_OGG_PAD_NEEDS_DISCONT; + ); if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, - pad->flags |= GST_OGG_PAD_NEEDS_FLUSH;); + pad->flags |= GST_OGG_PAD_NEEDS_FLUSH; + ); } GST_DEBUG_OBJECT (ogg, "initiating seeking to format %d, offset %" G_GUINT64_FORMAT, format, @@ -694,7 +696,8 @@ gst_event_unref (event); GST_FLAG_UNSET (ogg, GST_OGG_FLAG_WAIT_FOR_DISCONT); break; default: gst_pad_event_default (pad, event); @@ -980,7 +983,8 @@ *end = G_MAXINT64; g_assert (ogg->current_chain >= 0); - FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset);); + FOR_PAD_IN_CURRENT_CHAIN (ogg, pad, *start = MAX (*start, pad->end_offset); + ); if (ogg->setup_state == SETUP_FIND_LAST_CHAIN) { *end = gst_file_pad_get_length (ogg->sinkpad); @@ -1109,7 +1113,8 @@ } else { endpos = G_MAXINT64; FOR_PAD_IN_CHAIN (ogg, pad, ogg->chains->len - 1, - endpos = MIN (endpos, pad->start_offset);); + endpos = MIN (endpos, pad->start_offset); + ); } if (!ogg->seek_skipped || gst_ogg_demux_position (ogg) >= endpos) { /* have we found the endposition for all streams yet? */ @@ -1530,7 +1535,7 @@ { ogg_packet packet; int ret; - GstBuffer *buf; + GstBuffer *buf = NULL; /* Hack. If someone connects to the push (or any related) signal and * goes to READY, the pad will be destroyed and the next line will @@ -1593,21 +1598,25 @@ pos = get_relative (ogg, pad, pad->known_offset, GST_FORMAT_DEFAULT); } - /* optimization: use a bufferpool containing the ogg packet? */ - buf = - gst_pad_alloc_buffer (pad->pad, GST_BUFFER_OFFSET_NONE, - packet.bytes); - memcpy (buf->data, packet.packet, packet.bytes); - if (pad->offset != -1) - GST_BUFFER_OFFSET (buf) = pad->offset; - if (packet.granulepos != -1 && pos != -1) - GST_BUFFER_OFFSET_END (buf) = pos; + if (packet.bytes != 0) { + /* optimization: use a bufferpool containing the ogg packet? */ + buf = + gst_pad_alloc_buffer (pad->pad, GST_BUFFER_OFFSET_NONE, + packet.bytes); + memcpy (buf->data, packet.packet, packet.bytes); + if (pad->offset != -1) + GST_BUFFER_OFFSET (buf) = pad->offset; + if (packet.granulepos != -1 && pos != -1) + GST_BUFFER_OFFSET_END (buf) = pos; + } pad->offset = packet.granulepos; gst_ogg_sync (ogg, pad); - if (GST_PAD_IS_USABLE (pad->pad)) - gst_pad_push (pad->pad, GST_DATA (buf)); - else - gst_buffer_unref (buf); + if (GST_PAD_IS_USABLE (pad->pad)) + gst_pad_push (pad->pad, GST_DATA (buf)); + else + gst_buffer_unref (buf); break; default: |