And use the output segment position for the outgoing timestamp while it
is. This is needed to delay the calculation of `output_ts_offset` until
we actually have a usable timestamp, as tsmux will output a few initial
packets while `last_ts` is still unset.
Without this, the calculation would use the initial `0` value, which did
not have the intended effect of making VBR mode behave like CBR mode,
but always calculated an offset equal to the selected start time.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1884>
mux->first = TRUE;
mux->last_flow_ret = GST_FLOW_OK;
- mux->last_ts = 0;
+ mux->last_ts = GST_CLOCK_TIME_NONE;
mux->is_delta = TRUE;
mux->is_header = FALSE;
}
GST_BUFFER_PTS (buf) += mux->output_ts_offset;
- }
- if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buf))) {
agg_segment->position = GST_BUFFER_PTS (buf);
+ } else if (agg_segment->position == -1
+ || agg_segment->position < agg_segment->start) {
+ GST_BUFFER_PTS (buf) = agg_segment->start;
+ } else {
+ GST_BUFFER_PTS (buf) = agg_segment->position;
}
/* do common init (flags and streamheaders) */