Message ID | 20190814235130.5973-2-cus@passwd.hu |
---|---|
State | New |
Headers | show |
Hi Marton, Very good work with your series of patches on the mpegtsenc! ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ On Thursday, 15 de August de 2019 1:51, Marton Balint <cus@passwd.hu> wrote: > Also document the algorithm for the default PCR interval. > [...] > + if (ts->mux_rate > 1 || ts->pcr_period_ms >= 0) { > + int pcr_period_ms = ts->pcr_period_ms == -1 ? PCR_RETRANS_TIME : ts->pcr_period_ms; > + ts_st->pcr_period = av_rescale(pcr_period_ms, PCR_TIME_BASE, 1000); > } else { > /* For VBR we select the highest multiple of frame duration which is less than 100 ms. */ A simple aesthetic comment: Please, change this to... /* By default, for VBR we select the highest multiple of frame duration which is less than 100 ms. */ Regards. A.H. ---
On Fri, 16 Aug 2019, Andreas Håkon wrote: > Hi Marton, > > Very good work with your series of patches on the mpegtsenc! > > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ > On Thursday, 15 de August de 2019 1:51, Marton Balint <cus@passwd.hu> wrote: > >> Also document the algorithm for the default PCR interval. > >> [...] > >> + if (ts->mux_rate > 1 || ts->pcr_period_ms >= 0) { >> + int pcr_period_ms = ts->pcr_period_ms == -1 ? PCR_RETRANS_TIME : ts->pcr_period_ms; >> + ts_st->pcr_period = av_rescale(pcr_period_ms, PCR_TIME_BASE, 1000); >> } else { >> /* For VBR we select the highest multiple of frame duration which is less than 100 ms. */ > > A simple aesthetic comment: > Please, change this to... > /* By default, for VBR we select the highest multiple of frame duration which is less than 100 ms. */ Ok, changed locally. Will apply patchset soon. Regards, Marton
On Fri, 23 Aug 2019, Marton Balint wrote: > > > On Fri, 16 Aug 2019, Andreas Håkon wrote: > >> Hi Marton, >> >> Very good work with your series of patches on the mpegtsenc! >> >> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ >> On Thursday, 15 de August de 2019 1:51, Marton Balint <cus@passwd.hu> > wrote: >> >>> Also document the algorithm for the default PCR interval. >> >>> [...] >> >>> + if (ts->mux_rate > 1 || ts->pcr_period_ms >= 0) { >>> + int pcr_period_ms = ts->pcr_period_ms == -1 ? PCR_RETRANS_TIME > : ts->pcr_period_ms; >>> + ts_st->pcr_period = av_rescale(pcr_period_ms, PCR_TIME_BASE, > 1000); >>> } else { >>> /* For VBR we select the highest multiple of frame duration which is > less than 100 ms. */ >> >> A simple aesthetic comment: >> Please, change this to... >> /* By default, for VBR we select the highest multiple of frame duration > which is less than 100 ms. */ > > Ok, changed locally. > > Will apply patchset soon. Applied patchset. Regards, Marton
Hi Marton, ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ On Friday, 23 de August de 2019 23:13, Marton Balint <cus@passwd.hu> wrote: > On Fri, 23 Aug 2019, Marton Balint wrote: > > > On Fri, 16 Aug 2019, Andreas Håkon wrote: > > > > > Hi Marton, > > > Very good work with your series of patches on the mpegtsenc! > > > > > A simple aesthetic comment: > > > Please, change this to... > > > /* By default, for VBR we select the highest multiple of frame duration > > > which is less than 100 ms. */ > > > > Ok, changed locally. > > Will apply patchset soon. > > Applied patchset. > Great! I'm testing it (last patchset) with my Interleaved MUX patch and it seems to play well. https://patchwork.ffmpeg.org/patch/14589/ So, please, can you start reviewing it? Regards. A.H. ---
diff --git a/doc/muxers.texi b/doc/muxers.texi index 019eee6145..c27bfee4f5 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -1619,8 +1619,10 @@ is @code{-1}, which results in shifting timestamps so that they start from 0. Omit the PES packet length for video packets. Default is @code{1} (true). @item pcr_period @var{integer} -Override the default PCR retransmission time in milliseconds. Ignored if -variable muxrate is selected. Default is @code{20}. +Override the default PCR retransmission time in milliseconds. Default is +@code{-1} which means that the PCR interval will be determined automatically: +20 ms is used for CBR streams, the highest multiple of the frame duration which +is less than 100 ms is used for VBR streams. @item pat_period @var{double} Maximum time in seconds between PAT/PMT tables. diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 5cdd9d3313..9dee5fa1d0 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -790,8 +790,9 @@ static void enable_pcr_generation_for_stream(AVFormatContext *s, AVStream *pcr_s MpegTSWrite *ts = s->priv_data; MpegTSWriteStream *ts_st = pcr_st->priv_data; - if (ts->mux_rate > 1) { - ts_st->pcr_period = av_rescale(ts->pcr_period_ms, PCR_TIME_BASE, 1000); + if (ts->mux_rate > 1 || ts->pcr_period_ms >= 0) { + int pcr_period_ms = ts->pcr_period_ms == -1 ? PCR_RETRANS_TIME : ts->pcr_period_ms; + ts_st->pcr_period = av_rescale(pcr_period_ms, PCR_TIME_BASE, 1000); } else { /* For VBR we select the highest multiple of frame duration which is less than 100 ms. */ int64_t frame_period = 0; @@ -1964,7 +1965,7 @@ static const AVOption options[] = { { .i64 = 1 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM }, { "pcr_period", "PCR retransmission time in milliseconds", offsetof(MpegTSWrite, pcr_period_ms), AV_OPT_TYPE_INT, - { .i64 = PCR_RETRANS_TIME }, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM }, + { .i64 = -1 }, -1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM }, { "pat_period", "PAT/PMT retransmission time limit in seconds", offsetof(MpegTSWrite, pat_period), AV_OPT_TYPE_DOUBLE, { .dbl = INT_MAX }, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
Also document the algorithm for the default PCR interval. Fixes ticket #8061. Signed-off-by: Marton Balint <cus@passwd.hu> --- doc/muxers.texi | 6 ++++-- libavformat/mpegtsenc.c | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-)