[FFmpeg-cvslog] mpegtsenc: Add an AVOption for forcing a new PAT/PMT/SDT to be written
Martin Storsjö
git at videolan.org
Tue Feb 14 02:18:51 CET 2012
ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Sun Jan 29 02:12:06 2012 +0200| [ddf422803b667215d8ac41da7bb091d861db0c9b] | committer: Martin Storsjö
mpegtsenc: Add an AVOption for forcing a new PAT/PMT/SDT to be written
When segmenting the output from the mpegts muxer, one can
now set this option when cutting to a new segment, to make sure
the next segment starts with PAT/PMT/SDT.
Signed-off-by: Martin Storsjö <martin at martin.st>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ddf422803b667215d8ac41da7bb091d861db0c9b
---
libavformat/mpegtsenc.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 8232cbc..493ae2e 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -76,6 +76,8 @@ typedef struct MpegTSWrite {
int pmt_start_pid;
int start_pid;
+
+ int reemit_pat_pmt;
} MpegTSWrite;
/* a PES packet header is generated every DEFAULT_PES_HEADER_FREQ packets */
@@ -96,6 +98,8 @@ static const AVOption options[] = {
{ "muxrate", NULL, offsetof(MpegTSWrite, mux_rate), AV_OPT_TYPE_INT, {1}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
{ "pes_payload_size", "Minimum PES packet payload in bytes",
offsetof(MpegTSWrite, pes_payload_size), AV_OPT_TYPE_INT, {DEFAULT_PES_PAYLOAD_SIZE}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+ { "resend_headers", "Reemit PAT/PMT before writing the next packet",
+ offsetof(MpegTSWrite, reemit_pat_pmt), AV_OPT_TYPE_INT, {0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
{ NULL },
};
@@ -939,6 +943,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
const uint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE)*2;
int64_t dts = AV_NOPTS_VALUE, pts = AV_NOPTS_VALUE;
+ if (ts->reemit_pat_pmt) {
+ ts->pat_packet_count = ts->pat_packet_period - 1;
+ ts->sdt_packet_count = ts->sdt_packet_period - 1;
+ ts->reemit_pat_pmt = 0;
+ }
+
if (pkt->pts != AV_NOPTS_VALUE)
pts = pkt->pts + delay;
if (pkt->dts != AV_NOPTS_VALUE)
More information about the ffmpeg-cvslog
mailing list