From patchwork Wed Jan 12 15:27:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gyan Doshi X-Patchwork-Id: 33279 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4732908iog; Wed, 12 Jan 2022 07:28:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJzEsTm3/7tbYoxX48ZhmjDXLGqS8Jyk4TY5k6qEvuVQjm+XEGTNATCCG5iqVX2lXraeFq3v X-Received: by 2002:a50:ab1a:: with SMTP id s26mr176274edc.182.1642001317113; Wed, 12 Jan 2022 07:28:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642001317; cv=none; d=google.com; s=arc-20160816; b=Qrboe/BpDSM3CJHm7MlyjjdHiYCsoG1CiuJRfYl3r4RMpFdim0LSKN6m0m7DrlMT+S rp7a39oVTniv7nVrt8CXUzfoEF4QSUbiP2bgTkFJH1QZpNKW5Vvxj4v+tFqZiTyVxtrS pn+WF/S9eq9xjEiUOwTneUOw+X04rmQUpUjFuP3O1h+DJfqyDOwdMKrNLj39peWZ35CR qZcp3nECxobzgK1XvFgXZDZDnCgd2vm0Q9pr75LYFvWVAwHBX4GyoS/Dm/fHH5720qWu gew7PL1Q8TOjgze0nQ5eydOnhwJrVJcQq0aT6sPsf1aJqbXdb/jfiLf+Ex08fT0nbEba wG4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=7jpMBR5jnQHOhKZEoJRI6FpeoDZ/qYLiQaFNYAdUySw=; b=Vei5ZhCgmlnd59Ih/xIXx1wi9nCgjeLtrFYSZEop9iLHnb1TcUUvawu8epBbk5JG7+ VfcI8CoAd+OE2HoWBbBCbVquR5UOsUIb8oOxxukMtaGtHrX0Ve38HzV1TfUH2dSck1Qp KIOwPpVeu2ZRDU4ftkMxKI6prFgaL0tQKkJS7Xk5z9uYaPTvoLARZJoG7SBM/ubV5Qwd ShMGCP8zzIJpnxgEhbaDTsXou3LbhVCb0uN6hhSEV1bBYZCVZqZIyDhRnHlaL0CGWz53 eG0B2xSTPX3MF9rxuFf1hVJaelW2TmopiybpSqRs5dM6CnNRETnjYGr2kNv2aaIAgtpp 5R4Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id sg40si52330ejc.86.2022.01.12.07.28.36; Wed, 12 Jan 2022 07:28:37 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0A60B68ABD1; Wed, 12 Jan 2022 17:28:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B1B268073D for ; Wed, 12 Jan 2022 17:28:25 +0200 (EET) Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:105:465:1:3:0]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4JYs085WTLzQjcr for ; Wed, 12 Jan 2022 16:28:24 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de From: Gyan Doshi To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jan 2022 20:57:55 +0530 Message-Id: <20220112152755.1319-1-ffmpeg@gyani.pro> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avformat/mpegts: add option max_packet_size X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: U1TucVz2GM0G Makes maximum size of emitted packet user-tunable. --- doc/demuxers.texi | 4 ++++ libavformat/mpegts.c | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/demuxers.texi b/doc/demuxers.texi index 26ae768d7a..aef5976551 100644 --- a/doc/demuxers.texi +++ b/doc/demuxers.texi @@ -775,6 +775,10 @@ disabled). Default value is -1. @item merge_pmt_versions Re-use existing streams when a PMT's version is updated and elementary streams move to different PIDs. Default value is 0. + +@item max_packet_size +Set maximum size, in bytes, of packet emitted by the demuxer. Payloads above this size +are split across multiple packets. Range is 1 to INT_MAX. Default is 204800 bytes. @end table @section mpjpeg diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 2479cb6f7d..6ff1a54706 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -162,6 +162,7 @@ struct MpegTSContext { int resync_size; int merge_pmt_versions; + int max_packet_size; /******************************************/ /* private mpegts data */ @@ -198,6 +199,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 = MAX_PES_PAYLOAD}, 1, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, { NULL }, }; @@ -1121,7 +1124,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 +1371,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 +1381,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) {