‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Tuesday, 23 de April de 2019 13:43, Moritz Barsnick <barsn...@gmx.net> wrote:

> On Tue, Apr 23, 2019 at 11:15:40 +0000, Andreas Håkon wrote:
>
> Nits:
>
> > Subject: libavformat: forced PCR pid in mpegts muxer
>
> "libavformat/mpegtsenc: allow to force the PID carrying the PCR"
> (or something along those lines)
>
> > By default FFmpeg selects the first video stream, or the first one in
> > the service if no video stream is found.
>
> This could also go into the documentation, if it doesn't already say so
> somewhere.
>
> > All then the output audio stream (with pid:202) will host the PCR marks.
>
> "All then the"?
>
> > +Override the pid for carring the PCR clock.
>
>                         ^
>
>
> Typo: carrying
>
> Thanks,
> Moritz

Thank you Moritz!
All applied.

In addition, one correction regarding the initialization.
Sorry, but first version has an error. This is clean!

Regards.
A.H.

---

From af5a92aa00bb159eb2c967ee8764a2a6ffea1abf Mon Sep 17 00:00:00 2001
From: Andreas Hakon <andreas.ha...@protonmail.com>
Date: Tue, 23 Apr 2019 12:55:04 +0100
Subject: [PATCH] libavformat/mpegtsenc: allow to force the PID carrying the PCR

This patch provides a new optional parameter for the mpegtsenc muxer.
The parameter "-force_prc_pid" can be used to override the default PCR pid.
By default FFmpeg selects the first video stream, or the first one in the
service if no video stream is found. With this new parameter any of the pids in 
the service can be used to carry the PCR clock.
This can be handy for many reasons.

Example:
  $ ffmpeg -i input.mpg -c:v libx264 -c:a mp2 \
    -f mpegts -mpegts_pmt_start_pid 200 -streamid 0:201 -streamid 1:202 \
    -force_pcr_pid 202 output.ts
Result: output audio stream (with pid:202) will host the PCR marks.

Signed-off-by: Andreas Hakon <andreas.ha...@protonmail.com>
---
 doc/muxers.texi         |    5 +++++
 libavformat/mpegtsenc.c |   11 ++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/doc/muxers.texi b/doc/muxers.texi
index 83ae017..e5d81ad 100644
--- a/doc/muxers.texi
+++ b/doc/muxers.texi
@@ -1590,6 +1590,11 @@ is @code{-1}, which results in shifting timestamps so 
that they start from 0.
 @item omit_video_pes_length @var{boolean}
 Omit the PES packet length for video packets. Default is @code{1} (true).
 
+@item force_pcr_pid @var{integer}
+Override the pid for carrying the PCR clock.
+By default FFmpeg selects the first video stream, or the first one in
+the service if no video stream is found.
+
 @item pcr_period @var{integer}
 Override the default PCR retransmission time in milliseconds. Ignored if
 variable muxrate is selected. Default is @code{20}.
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index fc0ea22..b741b48 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -96,6 +96,7 @@ typedef struct MpegTSWrite {
 
     int pmt_start_pid;
     int start_pid;
+    int pcr_forced_pid;
     int m2ts_mode;
 
     int reemit_pat_pmt; // backward compatibility
@@ -913,9 +914,9 @@ static int mpegts_init(AVFormatContext *s)
         ts_st->first_pts_check = 1;
         ts_st->cc              = 15;
         ts_st->discontinuity   = ts->flags & MPEGTS_FLAG_DISCONT;
-        /* update PCR pid by using the first video stream */
-        if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
-            service->pcr_pid == 0x1fff) {
+        /* update PCR pid by: forced pid or using the first video stream */
+        if ((ts->pcr_forced_pid != 0x0010 && ts_st->pid == ts->pcr_forced_pid) 
||
+            (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && 
service->pcr_pid == 0x1fff)) {
             service->pcr_pid = ts_st->pid;
             pcr_st           = st;
         }
@@ -960,6 +961,7 @@ static int mpegts_init(AVFormatContext *s)
         service->pcr_pid = ts_st->pid;
     } else
         ts_st = pcr_st->priv_data;
+    av_log(s, AV_LOG_VERBOSE, "PCR in pid %d (%d) \n", service->pcr_pid, 
st->index);
 
     if (ts->mux_rate > 1) {
         service->pcr_packet_period = (int64_t)ts->mux_rate * ts->pcr_period /
@@ -1917,6 +1919,9 @@ static const AVOption options[] = {
     { "mpegts_start_pid", "Set the first pid.",
       offsetof(MpegTSWrite, start_pid), AV_OPT_TYPE_INT,
       { .i64 = 0x0100 }, 0x0010, 0x0f00, AV_OPT_FLAG_ENCODING_PARAM },
+    { "force_pcr_pid", "Force the pid carring PCR.",
+      offsetof(MpegTSWrite, pcr_forced_pid), AV_OPT_TYPE_INT,
+      { .i64 = 0x0010 }, 0x0010, 0x1ffe, AV_OPT_FLAG_ENCODING_PARAM },
     { "mpegts_m2ts_mode", "Enable m2ts mode.",
       offsetof(MpegTSWrite, m2ts_mode), AV_OPT_TYPE_BOOL,
       { .i64 = -1 }, -1, 1, AV_OPT_FLAG_ENCODING_PARAM },
-- 
1.7.10.4

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to