diff options
author | Gyan Doshi <ffmpeg@gyani.pro> | 2022-01-12 20:39:59 +0530 |
---|---|---|
committer | Gyan Doshi <ffmpeg@gyani.pro> | 2022-01-16 10:46:38 +0530 |
commit | bca30570d28bbaa07badadabf55ec3589201a82f (patch) | |
tree | e9890dd898aa6c36685749f5d097f86e07b77fdb /libavformat/mpegts.c | |
parent | b1ef5882e35d1a95e9c4838d0933084773055345 (diff) |
avformat/mpegts: add option max_packet_size
Makes maximum size of emitted packet user-tunable.
Default is existing 204800 bytes.
Diffstat (limited to 'libavformat/mpegts.c')
-rw-r--r-- | libavformat/mpegts.c | 11 |
1 files changed, 6 insertions, 5 deletions
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) { |