From ddf422803b667215d8ac41da7bb091d861db0c9b Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Sun, 29 Jan 2012 02:12:06 +0200 Subject: mpegtsenc: Add an AVOption for forcing a new PAT/PMT/SDT to be written MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ö --- libavformat/mpegtsenc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libavformat/mpegtsenc.c') diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 8232cbc76d..493ae2eb6f 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) -- cgit v1.2.3