[FFmpeg-devel] [PATCH] mpegts: pcr period option for variable bitrate multiplexing

Michael Niedermayer michael at niedermayer.cc
Sat Mar 26 15:55:10 CET 2016


On Fri, Mar 25, 2016 at 12:50:29PM -0400, Predrag Filipovic wrote:
> Enable proper PCR insertion for VBR multiplexing (muxrate not specified).
> Insertion timing is based on video frame keys and frame period, consequently
> pcr period precision is limited to +/- one video frame period.
> 
> Signed-off-by: Predrag Filipovic <agoracsinc at gmail.com>
> ---
>  libavformat/mpegtsenc.c | 80 +++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 61 insertions(+), 19 deletions(-)
> 
> diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
> index 7656720..7ed9076 100644
> --- a/libavformat/mpegtsenc.c
> +++ b/libavformat/mpegtsenc.c
> @@ -105,6 +105,7 @@ typedef struct MpegTSWrite {
>      int tables_version;
>      double pat_period;
>      double sdt_period;
> +    int64_t last_pcr_ts;
>      int64_t last_pat_ts;
>      int64_t last_sdt_ts;
>  
> @@ -903,6 +904,9 @@ static int mpegts_init(AVFormatContext *s)
>          ts_st = pcr_st->priv_data;
>  
>      if (ts->mux_rate > 1) {
> +        if (ts->pcr_period >= INT_MAX/2) {
> +            ts->pcr_period = PCR_RETRANS_TIME;
> +        }
>          service->pcr_packet_period = (int64_t)ts->mux_rate * ts->pcr_period /
>                                       (TS_PACKET_SIZE * 8 * 1000);
>          ts->sdt_packet_period      = (int64_t)ts->mux_rate * SDT_RETRANS_TIME /
> @@ -931,10 +935,19 @@ static int mpegts_init(AVFormatContext *s)
>              service->pcr_packet_period =
>                  ts_st->user_tb.den / (10 * ts_st->user_tb.num);
>          }
> -        if (!service->pcr_packet_period)
> +        /* if pcr_period specified, mark pcr_packet_period as NA (=INT_MAX) */
> +        if (ts->pcr_period < INT_MAX/2) {
> +            service->pcr_packet_period = INT_MAX;
> +        } else {
> +        if (!service->pcr_packet_period) {
>              service->pcr_packet_period = 1;
> +        } else if (service->pcr_packet_period == INT_MAX) {
> +            service->pcr_packet_period--;
> +        }
> +        }

there is somethig wrong with the indention here

have you tested the patch with multiple programs ?
what have you used to test that the TS after this patch is more
valid than before ?

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Many things microsoft did are stupid, but not doing something just because
microsoft did it is even more stupid. If everything ms did were stupid they
would be bankrupt already.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160326/5646264b/attachment.sig>


More information about the ffmpeg-devel mailing list