mpegdemux: send GAP event rather than segment updates

This commit is contained in:
Mark Nauwelaerts 2012-10-11 12:07:46 +02:00
parent 20cd96f5c3
commit b8312df0a3
2 changed files with 9 additions and 28 deletions

View file

@ -166,7 +166,7 @@ static inline gboolean gst_flups_demux_scan_forward_ts (GstFluPSDemux * demux,
static inline gboolean gst_flups_demux_scan_backward_ts (GstFluPSDemux * demux,
guint64 * pos, SCAN_MODE mode, guint64 * rts, gint limit);
static inline void gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
static inline void gst_flups_demux_send_gap_updates (GstFluPSDemux * demux,
GstClockTime new_time);
static inline void gst_flups_demux_clear_times (GstFluPSDemux * demux);
@ -606,7 +606,7 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
stream->last_ts = new_time;
}
gst_flups_demux_send_segment_updates (demux, new_time);
gst_flups_demux_send_gap_updates (demux, new_time);
}
/* Set the buffer discont flag, and clear discont state on the stream */
@ -798,20 +798,19 @@ gst_flups_demux_clear_times (GstFluPSDemux * demux)
GstFluPSStream *stream = demux->streams_found[i];
if (G_LIKELY (stream)) {
stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE;
stream->last_ts = GST_CLOCK_TIME_NONE;
}
}
}
static inline void
gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
GstClockTime new_start)
gst_flups_demux_send_gap_updates (GstFluPSDemux * demux, GstClockTime new_start)
{
GstClockTime base_time, stop, time;
GstClockTime base_time, stop;
gint i, count = demux->found_count;
GstEvent *event = NULL;
/* Advance all lagging streams by sending a segment update */
/* Advance all lagging streams by sending a gap event */
if ((base_time = demux->base_time) == GST_CLOCK_TIME_NONE)
base_time = 0;
@ -822,9 +821,6 @@ gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
if (new_start > stop)
return;
time = demux->src_segment.time;
time += new_start - (demux->src_segment.start + base_time);
/* FIXME: Handle reverse playback */
for (i = 0; i < count; i++) {
GstFluPSStream *stream = demux->streams_found[i];
@ -836,28 +832,14 @@ gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
if (stream->last_ts + stream->segment_thresh < new_start) {
GST_DEBUG_OBJECT (demux,
"Segment update to pad %s time %" GST_TIME_FORMAT,
"Sending gap update to pad %s time %" GST_TIME_FORMAT,
GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_start));
if (event == NULL) {
GstSegment segment;
gst_segment_init (&segment, GST_FORMAT_TIME);
segment.rate = demux->src_segment.rate;
segment.applied_rate = demux->src_segment.applied_rate;
segment.start = new_start;
segment.stop = stop;
segment.time = time;
event = gst_event_new_segment (&segment);
}
gst_event_ref (event);
event =
gst_event_new_gap (stream->last_ts, new_start - stream->last_ts);
gst_pad_push_event (stream->pad, event);
stream->last_seg_start = stream->last_ts = new_start;
stream->need_segment = FALSE;
}
}
}
if (event)
gst_event_unref (event);
}
static inline gboolean

View file

@ -89,7 +89,6 @@ struct _GstFluPSStream
gint type;
GstClockTime segment_thresh;
GstClockTime last_seg_start;
GstClockTime last_ts;
gboolean discont;