From patchwork Fri Aug 28 00:10:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 21957 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 7555944BA4A for ; Fri, 28 Aug 2020 03:10:21 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4667C68ADC1; Fri, 28 Aug 2020 03:10:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DA04E689722 for ; Fri, 28 Aug 2020 03:10:14 +0300 (EEST) Received: by mail-ej1-f66.google.com with SMTP id si26so10003621ejb.12 for ; Thu, 27 Aug 2020 17:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=nP7CKE1AvirnGdX4m5Q16Y7UH7fF1pZ5jgJd6Tthm7Y=; b=u9tPpxMMdDe7JlFcJOBnxlpy9qYMnb08RiNSdURubbuNMxwjD2yTATY3j4K+iHgKOK ECyBsKD8vsm/0psT9/1XMF9ESO0Eadxw6/MW7F9pSkS2Iicb6pdvV7CvvasxE38G9Gem IV0o5MNERsVxf2Rvhh/H4DjuTDpzzFszXHsxmXmgGkzmOFL2QOCMeDCmEd+9zq3Jvou1 boJ2Xrj5RczAvRKtAATQFepjZTlmOXuaBOp1fKIXVbrtvjx+lDbCgsDFxQ82SeSk2Nlk F3bB83+fr1RcJCo7N183AkraloRniSIsEXAhXyfQZZmtUkSSzf4CjI3+/pM8KlSvddmC 2rEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=nP7CKE1AvirnGdX4m5Q16Y7UH7fF1pZ5jgJd6Tthm7Y=; b=Rc9s3K+FtqNIEO7Crj7uKlTDfdVpmj3ypNTKCrw39pG+3Ruk705cwd7GTaHbuL1cLO UUd1qDnqboBnTKitv1c9s7ZTY2kpMhyy/qE7Ye5m+Ypf6PTb+vtkruboxqQrUyq+sAIe 2QWQo9VAXIxHt+MI9NgeNX5e9zNlAzWaf/GR2/OWeAsxCNVsFUg5v1gkVRXfjvD37GZ5 i3Wg6A9k07jgtq6QtmnVlQVS4aY7723VvrYf55jDWM1rzFHnaED8N34mYS1hiGFoPltx k5M1i051IiuJBZk9lCxSIkzJtDxqb9e1xGN8Y9mm+MqoPDofrYfSLyqSjU7S7FOGC7vM Wudg== X-Gm-Message-State: AOAM5307F7PAh156VbvyUr2YANlkVKO0232MDefSOtY05RahH0p+UtHQ 3W+iQ7z2rMvydqiYYHqbFR3EM/6Te4SUqQ== X-Google-Smtp-Source: ABdhPJx3N6cQjb7zPGFWwbakIDpFqMvTbNvJqK4C+1DAEIuD5q8pwhuHDOd2tnji/8lbwf/6cKRpWg== X-Received: by 2002:a17:907:608:: with SMTP id wp8mr13727775ejb.72.1598573414143; Thu, 27 Aug 2020 17:10:14 -0700 (PDT) Received: from localhost.localdomain ([94.250.163.64]) by smtp.gmail.com with ESMTPSA id w20sm3146927ejc.77.2020.08.27.17.10.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2020 17:10:13 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Fri, 28 Aug 2020 02:10:04 +0200 Message-Id: <20200828001004.26729-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avformat/wavdec: allow to change max size of single demuxed packet X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Can make demuxing much faster, expecially for files with huge number of channels. Signed-off-by: Paul B Mahol --- libavformat/wavdec.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index e1b2115434..5b3c481421 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -56,6 +56,7 @@ typedef struct WAVDemuxContext { int smv_eof; int audio_eof; int ignore_length; + int max_size; int spdif; int smv_cur_pt; int smv_given_first; @@ -628,8 +629,6 @@ static int64_t find_guid(AVIOContext *pb, const uint8_t guid1[16]) return AVERROR_EOF; } -#define MAX_SIZE 4096 - static int wav_read_packet(AVFormatContext *s, AVPacket *pkt) { int ret, size; @@ -706,7 +705,7 @@ smv_out: wav->data_end = avio_tell(s->pb) + left; } - size = MAX_SIZE; + size = wav->max_size; if (st->codecpar->block_align > 1) { if (size < st->codecpar->block_align) size = st->codecpar->block_align; @@ -759,6 +758,7 @@ static int wav_read_seek(AVFormatContext *s, #define DEC AV_OPT_FLAG_DECODING_PARAM static const AVOption demux_options[] = { { "ignore_length", "Ignore length", OFFSET(ignore_length), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, DEC }, + { "max_size", "max size of single packet", OFFSET(max_size), AV_OPT_TYPE_INT, { .i64 = 4096 }, 1024, 1 << 22, DEC }, { NULL }, }; @@ -906,6 +906,20 @@ static int w64_read_header(AVFormatContext *s) return 0; } +#define OFFSET(x) offsetof(WAVDemuxContext, x) +#define DEC AV_OPT_FLAG_DECODING_PARAM +static const AVOption w64_demux_options[] = { + { "max_size", "max size of single packet", OFFSET(max_size), AV_OPT_TYPE_INT, { .i64 = 4096 }, 1024, 1 << 22, DEC }, + { NULL }, +}; + +static const AVClass w64_demuxer_class = { + .class_name = "W64 demuxer", + .item_name = av_default_item_name, + .option = w64_demux_options, + .version = LIBAVUTIL_VERSION_INT, +}; + AVInputFormat ff_w64_demuxer = { .name = "w64", .long_name = NULL_IF_CONFIG_SMALL("Sony Wave64"), @@ -916,5 +930,6 @@ AVInputFormat ff_w64_demuxer = { .read_seek = wav_read_seek, .flags = AVFMT_GENERIC_INDEX, .codec_tag = (const AVCodecTag * const []) { ff_codec_wav_tags, 0 }, + .priv_class = &w64_demuxer_class, }; #endif /* CONFIG_W64_DEMUXER */