From bca30570d28bbaa07badadabf55ec3589201a82f Mon Sep 17 00:00:00 2001 From: Gyan Doshi Date: Wed, 12 Jan 2022 20:39:59 +0530 Subject: avformat/mpegts: add option max_packet_size Makes maximum size of emitted packet user-tunable. Default is existing 204800 bytes. --- libavformat/mpegts.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'libavformat/mpegts.c') diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 2479cb6f7d..da15223b8a 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -47,8 +47,6 @@ * synchronization is lost */ #define MAX_RESYNC_SIZE 65536 -#define MAX_PES_PAYLOAD 200 * 1024 - #define MAX_MP4_DESCR_COUNT 16 #define MOD_UNLIKELY(modulus, dividend, divisor, prev_dividend) \ @@ -162,6 +160,7 @@ struct MpegTSContext { int resync_size; int merge_pmt_versions; + int max_packet_size; /******************************************/ /* private mpegts data */ @@ -198,6 +197,8 @@ static const AVOption options[] = { {.i64 = 0}, 0, 1, 0 }, {"skip_clear", "skip clearing programs", offsetof(MpegTSContext, skip_clear), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, 0 }, + {"max_packet_size", "maximum size of emitted packet", offsetof(MpegTSContext, max_packet_size), AV_OPT_TYPE_INT, + {.i64 = 204800}, 1, INT_MAX/2, AV_OPT_FLAG_DECODING_PARAM }, { NULL }, }; @@ -1121,7 +1122,7 @@ static AVBufferRef *buffer_pool_get(MpegTSContext *ts, int size) { int index = av_log2(size + AV_INPUT_BUFFER_PADDING_SIZE); if (!ts->pools[index]) { - int pool_size = FFMIN(MAX_PES_PAYLOAD + AV_INPUT_BUFFER_PADDING_SIZE, 2 << index); + int pool_size = FFMIN(ts->max_packet_size + AV_INPUT_BUFFER_PADDING_SIZE, 2 << index); ts->pools[index] = av_buffer_pool_init(pool_size, NULL); if (!ts->pools[index]) return NULL; @@ -1368,7 +1369,7 @@ skip: break; case MPEGTS_PAYLOAD: do { - int max_packet_size = MAX_PES_PAYLOAD; + int max_packet_size = ts->max_packet_size; if (pes->PES_packet_length && pes->PES_packet_length + PES_START_SIZE > pes->pes_header_size) max_packet_size = pes->PES_packet_length + PES_START_SIZE - pes->pes_header_size; @@ -1378,7 +1379,7 @@ skip: if (ret < 0) return ret; pes->PES_packet_length = 0; - max_packet_size = MAX_PES_PAYLOAD; + max_packet_size = ts->max_packet_size; ts->stop_parse = 1; } else if (pes->data_index == 0 && buf_size > max_packet_size) { -- cgit v1.2.3