summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorVivia Nikolaidou <vivia@ahiru.eu>2020-07-10 21:14:01 +0300
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-07-28 16:18:45 +0000
commitd8b37973d2d9395665f2af8c5bc40bc3eb1cb48a (patch)
tree3ce9a1472184cab42063e7a298345c79609235c8 /gst
parent5a358b7687c019bca733f211242be544e233871d (diff)
downloadgstreamer-plugins-bad-d8b37973d2d9395665f2af8c5bc40bc3eb1cb48a.tar.gz
tsmux: Fix PCR calculation for CBR live streams
Take the first ever timestamp as an offset Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1431>
Diffstat (limited to 'gst')
-rw-r--r--gst/mpegtsmux/tsmux/tsmux.c9
-rw-r--r--gst/mpegtsmux/tsmux/tsmux.h2
2 files changed, 10 insertions, 1 deletions
diff --git a/gst/mpegtsmux/tsmux/tsmux.c b/gst/mpegtsmux/tsmux/tsmux.c
index 2856d0346..647d6e5bb 100644
--- a/gst/mpegtsmux/tsmux/tsmux.c
+++ b/gst/mpegtsmux/tsmux/tsmux.c
@@ -157,6 +157,8 @@ tsmux_new (void)
mux->new_stream_func = (TsMuxNewStreamFunc) tsmux_stream_new;
mux->new_stream_data = NULL;
+ mux->first_pcr_ts = G_MININT64;
+
return mux;
}
@@ -1252,7 +1254,12 @@ get_current_pcr (TsMux * mux, gint64 cur_ts)
if (!mux->bitrate)
return ts_to_pcr (cur_ts);
- return ts_to_pcr (CLOCK_BASE) +
+ if (mux->first_pcr_ts == G_MININT64) {
+ g_assert (cur_ts != G_MININT64);
+ mux->first_pcr_ts = cur_ts;
+ }
+
+ return ts_to_pcr (mux->first_pcr_ts) +
gst_util_uint64_scale (mux->n_bytes * 8, TSMUX_SYS_CLOCK_FREQ,
mux->bitrate);
}
diff --git a/gst/mpegtsmux/tsmux/tsmux.h b/gst/mpegtsmux/tsmux/tsmux.h
index 8dbb9dae6..9f067a342 100644
--- a/gst/mpegtsmux/tsmux/tsmux.h
+++ b/gst/mpegtsmux/tsmux/tsmux.h
@@ -200,6 +200,8 @@ struct TsMux {
/* For the per-PID continuity counter */
guint8 pid_packet_counts[8192];
+
+ gint64 first_pcr_ts;
};
/* create/free new muxer session */