2006-08-31 Edward Hervey <edward@fluendo.com>
+ * gst/adder/gstadder.c: (forward_event_func),
+ (gst_adder_src_event), (gst_adder_collected),
+ (gst_adder_change_state):
+ * gst/adder/gstadder.h:
+ Remember the start position asked in the incoming seeks, so we can
+ output GST_EVENT_NEW_SEGMENT with a correct position value (instead
+ of assuming it will always be 0).
+
+2006-08-31 Edward Hervey <edward@fluendo.com>
+
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
(gst_ogg_demux_finalize), (gst_ogg_demux_perform_seek),
(gst_ogg_demux_loop):
forward_event_func (GstPad * pad, GValue * ret, GstEvent * event)
{
gst_event_ref (event);
+ GST_LOG_OBJECT (pad, "About to send event %s", GST_EVENT_TYPE_NAME (event));
if (!gst_pad_push_event (pad, event)) {
g_value_set_boolean (ret, FALSE);
GST_WARNING_OBJECT (pad, "Sending event %p (%s) failed.",
case GST_EVENT_SEEK:
{
GstSeekFlags flags;
+ GstSeekType curtype;
+ guint64 cur;
/* parse the flushing flag */
- gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
+ gst_event_parse_seek (event, NULL, NULL, &flags, &curtype, &cur, NULL,
+ NULL);
/* if we are not flushing, just forward */
if (!flags & GST_SEEK_FLAG_FLUSH)
/* now wait for the collected to be finished and mark a new
* segment */
GST_OBJECT_LOCK (adder->collect);
+ if (curtype == GST_SEEK_TYPE_SET)
+ adder->segment_position = cur;
+ else
+ adder->segment_position = 0;
adder->segment_pending = TRUE;
GST_OBJECT_UNLOCK (adder->collect);
* match.
*/
event = gst_event_new_new_segment_full (FALSE, 1.0,
- 1.0, GST_FORMAT_TIME, adder->timestamp, -1, 0);
+ 1.0, GST_FORMAT_TIME, adder->timestamp, -1, adder->segment_position);
gst_pad_push_event (adder->srcpad, event);
adder->segment_pending = FALSE;
+ adder->segment_position = 0;
}
/* set timestamps on the output buffer */
adder->timestamp = 0;
adder->offset = 0;
adder->segment_pending = TRUE;
+ adder->segment_position = 0;
gst_segment_init (&adder->segment, GST_FORMAT_UNDEFINED);
gst_collect_pads_start (adder->collect);
break;