diff options
author | Vivia Nikolaidou <vivia@ahiru.eu> | 2020-07-10 21:14:01 +0300 |
---|---|---|
committer | GStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2020-07-28 16:18:45 +0000 |
commit | d8b37973d2d9395665f2af8c5bc40bc3eb1cb48a (patch) | |
tree | 3ce9a1472184cab42063e7a298345c79609235c8 /gst | |
parent | 5a358b7687c019bca733f211242be544e233871d (diff) | |
download | gstreamer-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.c | 9 | ||||
-rw-r--r-- | gst/mpegtsmux/tsmux/tsmux.h | 2 |
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 */ |