/* Current PTS/DTS for this stream */
GstClockTime pts;
GstClockTime dts;
- /* Raw value of current PTS/DTS */
- guint64 raw_pts;
- guint64 raw_dts;
- /* PTS/DTS with rollover fixed */
- guint64 fixed_pts;
- guint64 fixed_dts;
- /* Number of rollover seen for PTS/DTS (default:0) */
- guint nb_pts_rollover;
- guint nb_dts_rollover;
/* Whether this stream needs to send a newsegment */
gboolean need_newsegment;
stream->need_newsegment = TRUE;
stream->pts = GST_CLOCK_TIME_NONE;
stream->dts = GST_CLOCK_TIME_NONE;
- stream->raw_pts = 0;
- stream->raw_dts = 0;
- stream->fixed_pts = 0;
- stream->fixed_dts = 0;
- stream->nb_pts_rollover = 0;
- stream->nb_dts_rollover = 0;
stream->continuity_counter = CONTINUITY_UNSET;
}
stream->flow_return = GST_FLOW_OK;
stream->need_newsegment = TRUE;
stream->pts = GST_CLOCK_TIME_NONE;
stream->dts = GST_CLOCK_TIME_NONE;
- stream->raw_pts = 0;
- stream->raw_dts = 0;
- stream->fixed_pts = 0;
- stream->fixed_dts = 0;
- stream->nb_pts_rollover = 0;
- stream->nb_dts_rollover = 0;
if (stream->flow_return == GST_FLOW_FLUSHING) {
stream->flow_return = GST_FLOW_OK;
}
return;
}
- GST_LOG ("pid 0x%04x pts:%" G_GUINT64_FORMAT " at offset %"
+ GST_LOG ("pid 0x%04x raw pts:%" G_GUINT64_FORMAT " at offset %"
G_GUINT64_FORMAT, bs->pid, pts, offset);
- if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (stream->pts) &&
- ABSDIFF (stream->raw_pts, pts) > 900000)) {
- /* Detect rollover if diff > 10s */
- GST_LOG ("Detected rollover (previous:%" G_GUINT64_FORMAT " new:%"
- G_GUINT64_FORMAT ")", stream->raw_pts, pts);
- if (pts < stream->raw_pts) {
- /* Forward rollover */
- GST_LOG ("Forward rollover, incrementing nb_pts_rollover");
- stream->nb_pts_rollover++;
- } else {
- /* Reverse rollover */
- GST_LOG ("Reverse rollover, decrementing nb_pts_rollover");
- stream->nb_pts_rollover--;
- }
- }
-
/* Compute PTS in GstClockTime */
- stream->raw_pts = pts;
- stream->fixed_pts = pts + stream->nb_pts_rollover * PTS_DTS_MAX_VALUE;
- stream->pts = MPEGTIME_TO_GSTTIME (stream->fixed_pts);
-
- GST_LOG ("pid 0x%04x Stored PTS %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT ")",
- bs->pid, stream->raw_pts, GST_TIME_ARGS (stream->pts));
+ stream->pts =
+ mpegts_packetizer_pts_to_ts (MPEG_TS_BASE_PACKETIZER (demux),
+ MPEGTIME_TO_GSTTIME (pts), demux->program->pcr_pid);
+ GST_LOG ("pid 0x%04x Stored PTS %" G_GUINT64_FORMAT, bs->pid, stream->pts);
if (G_UNLIKELY (demux->emit_statistics)) {
GstStructure *st;
return;
}
- GST_LOG ("pid 0x%04x dts:%" G_GUINT64_FORMAT " at offset %"
+ GST_LOG ("pid 0x%04x raw dts:%" G_GUINT64_FORMAT " at offset %"
G_GUINT64_FORMAT, bs->pid, dts, offset);
- if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (stream->dts) &&
- ABSDIFF (stream->raw_dts, dts) > 900000)) {
- /* Detect rollover if diff > 10s */
- GST_LOG ("Detected rollover (previous:%" G_GUINT64_FORMAT " new:%"
- G_GUINT64_FORMAT ")", stream->raw_dts, dts);
- if (dts < stream->raw_dts) {
- /* Forward rollover */
- GST_LOG ("Forward rollover, incrementing nb_dts_rollover");
- stream->nb_dts_rollover++;
- } else {
- /* Reverse rollover */
- GST_LOG ("Reverse rollover, decrementing nb_dts_rollover");
- stream->nb_dts_rollover--;
- }
- }
-
/* Compute DTS in GstClockTime */
- stream->raw_dts = dts;
- stream->fixed_dts = dts + stream->nb_dts_rollover * PTS_DTS_MAX_VALUE;
- stream->dts = MPEGTIME_TO_GSTTIME (stream->fixed_dts);
+ stream->dts =
+ mpegts_packetizer_pts_to_ts (MPEG_TS_BASE_PACKETIZER (demux),
+ MPEGTIME_TO_GSTTIME (dts), demux->program->pcr_pid);
- GST_LOG ("pid 0x%04x Stored DTS %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT ")",
- bs->pid, stream->raw_dts, GST_TIME_ARGS (stream->dts));
+ GST_LOG ("pid 0x%04x Stored DTS %" G_GUINT64_FORMAT, bs->pid, stream->dts);
if (G_UNLIKELY (demux->emit_statistics)) {
GstStructure *st;
}
}
if (GST_CLOCK_TIME_IS_VALID (lowest_pts))
- firstts =
- mpegts_packetizer_pts_to_ts (base->packetizer, lowest_pts,
- demux->program->pcr_pid);
+ firstts = lowest_pts;
GST_DEBUG ("lowest_pts %" G_GUINT64_FORMAT " => clocktime %" GST_TIME_FORMAT,
lowest_pts, GST_TIME_ARGS (firstts));
GstFlowReturn res = GST_FLOW_OK;
MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
GstBuffer *buffer = NULL;
- MpegTSPacketizer2 *packetizer = MPEG_TS_BASE_PACKETIZER (demux);
GST_DEBUG_OBJECT (stream->pad,
"stream:%p, pid:0x%04x stream_type:%d state:%d", stream, bs->pid,
GST_DEBUG_OBJECT (stream->pad, "stream->pts %" GST_TIME_FORMAT,
GST_TIME_ARGS (stream->pts));
if (GST_CLOCK_TIME_IS_VALID (stream->pts))
- GST_BUFFER_PTS (buffer) =
- mpegts_packetizer_pts_to_ts (packetizer, stream->pts,
- demux->program->pcr_pid);
+ GST_BUFFER_PTS (buffer) = stream->pts;
if (GST_CLOCK_TIME_IS_VALID (stream->dts))
- GST_BUFFER_DTS (buffer) =
- mpegts_packetizer_pts_to_ts (packetizer, stream->dts,
- demux->program->pcr_pid);
+ GST_BUFFER_DTS (buffer) = stream->dts;
GST_DEBUG_OBJECT (stream->pad,
"Pushing buffer with PTS: %" GST_TIME_FORMAT " , DTS: %" GST_TIME_FORMAT,