From 4d53a7ac0974839dc4945e48ed1934d11ddb14f9 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Mon, 22 Apr 2019 22:10:42 +0200 Subject: [PATCH] tsmux: actually respect the PCR frequency we target --- gst/mpegtsmux/tsmux/tsmux.c | 12 +++++++----- gst/mpegtsmux/tsmux/tsmuxstream.c | 2 +- gst/mpegtsmux/tsmux/tsmuxstream.h | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/gst/mpegtsmux/tsmux/tsmux.c b/gst/mpegtsmux/tsmux/tsmux.c index 233a2530e5..0f09e4d440 100644 --- a/gst/mpegtsmux/tsmux/tsmux.c +++ b/gst/mpegtsmux/tsmux/tsmux.c @@ -1067,14 +1067,16 @@ tsmux_write_stream_packet (TsMux * mux, TsMuxStream * stream) } /* Need to decide whether to write a new PCR in this packet */ - if (stream->last_pcr == -1 || - (cur_pcr - stream->last_pcr > - (TSMUX_SYS_CLOCK_FREQ / TSMUX_DEFAULT_PCR_FREQ))) { - + if (stream->next_pcr == -1 || cur_pcr > stream->next_pcr) { stream->pi.flags |= TSMUX_PACKET_FLAG_ADAPTATION | TSMUX_PACKET_FLAG_WRITE_PCR; stream->pi.pcr = cur_pcr; - stream->last_pcr = cur_pcr; + + if (stream->next_pcr == -1) + stream->next_pcr = + cur_pcr + TSMUX_SYS_CLOCK_FREQ / TSMUX_DEFAULT_PCR_FREQ; + else + stream->next_pcr += TSMUX_SYS_CLOCK_FREQ / TSMUX_DEFAULT_PCR_FREQ; } else { cur_pcr = -1; } diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.c b/gst/mpegtsmux/tsmux/tsmuxstream.c index 602f4e7908..b6c975b0ea 100644 --- a/gst/mpegtsmux/tsmux/tsmuxstream.c +++ b/gst/mpegtsmux/tsmux/tsmuxstream.c @@ -228,7 +228,7 @@ tsmux_stream_new (guint16 pid, TsMuxStreamType stream_type) stream->last_dts = GST_CLOCK_STIME_NONE; stream->pcr_ref = 0; - stream->last_pcr = -1; + stream->next_pcr = -1; return stream; } diff --git a/gst/mpegtsmux/tsmux/tsmuxstream.h b/gst/mpegtsmux/tsmux/tsmuxstream.h index a6c5f9fea8..5234c489ea 100644 --- a/gst/mpegtsmux/tsmux/tsmuxstream.h +++ b/gst/mpegtsmux/tsmux/tsmuxstream.h @@ -199,8 +199,8 @@ struct TsMuxStream { /* count of programs using this as PCR */ gint pcr_ref; - /* last time PCR written */ - gint64 last_pcr; + /* Next time PCR should be written */ + gint64 next_pcr; /* audio parameters for stream * (used in stream descriptor) */