From patchwork Thu Sep 15 19:28:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 37944 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp521299pzh; Thu, 15 Sep 2022 12:29:16 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7ux6A4Mse1m+/TH5upx3vOBboZ2EYXsnz4VPU1ecnf3weKLC/2KjtUCt0KQ6bAMiq9xcCB X-Received: by 2002:a17:907:3188:b0:741:4bf7:ec1a with SMTP id xe8-20020a170907318800b007414bf7ec1amr1031424ejb.448.1663270155785; Thu, 15 Sep 2022 12:29:15 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id tz5-20020a170907c78500b00733e46f4543si12900698ejc.820.2022.09.15.12.29.15; Thu, 15 Sep 2022 12:29:15 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b="BbxKn/Jk"; arc=fail (body hash mismatch); 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2154D68BBE6; Thu, 15 Sep 2022 22:28:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-oln040092069055.outbound.protection.outlook.com [40.92.69.55]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C0CE268BBCE for ; Thu, 15 Sep 2022 22:28:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=auhJDxGtyxSLy9sDklmSYTF3JX1Vszk8v3Z7WiXR1R6aSF6+rFMmFSxkw5M+Pq5XhhEZqOPrn0Dpr3P+hff2sI22PMrHOKsaL1zs88zk7Ik9eNKl7/fU5n83Q+T96GL6gIQe4yjlO3qbdhPFj50EO7Cebpi3JASJFNNfeNyuW+lIJLP+vOFK2YRyDlVxfsNnPOVQViI8i25k696N9KmgQ7PKyW7zh6dFX788+IkeTEX1NMVURku27qgTMOSmL22I82WhRakLaqga1OnyRDjWCWRhnYOf7NMXLATeoxnDzT3QjJbTurmSGDEYEyWj5/tzByAcX8yK+JzN0+KZNEYwjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Of4FfwS/7BjhqrBk/8iwTqFOtQ7TAKjzg1gFQx1AWzQ=; b=cDGzrT2trt83LUxKZsE/YkI9ZKKcnsYsbdKNCMiHBlIApKthj7n0D1wWYkCb2Vrz7URKY1KN7OqzeGD4K8z4lx3rz7Ndxb9aCO2N8rkliYDOoMp+6r8VjGcyHVfFn2lDE84tjtaQc31GZm9uT1ZiD6DRttvR3ndU3N0dk2sc+qMorgnT8oo9aWO0+n7UYqQ6DXWeHpSUb0ztUb1Raw+D95jeq6HjrKTxTue3ISB1K2fpAUxF0B9jQq+uN6LZqgSO82FqIlMbInMtc7ue75712BEfuOY1DfgPHonSPtxbBKVNC4G/uUeXSztvv5jC4hzEL39AmXrEow2lDaQ04fC0fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Of4FfwS/7BjhqrBk/8iwTqFOtQ7TAKjzg1gFQx1AWzQ=; b=BbxKn/JkK7SJZY+NMtEOLcjx4ML9+pAwAetmuzj+j1V+bZLzqHt5ls7XbnJ2Klx+SjKVwioabsGdHwk1HlRd4voKuhspouj5Pethahhzkk8CjE6cysIpu934d1TLfK7X0PBLr6MLfQiDpyGaxK9USrq8biu/LA73aOJF+ihYwC55Pfq19XeTJZQdMpV7kDPhSKgJbfa9/CCbBZyXc6NhyPj7420ogx6PXrRPcim9OgEMjXyNXbApchEXQuxrqaXX2RydPQ3olgmzJDjasGMf1yYv24WCwGA7+ZkJtLNrtE1e6EBXqyLemLakJieJp8R+SRC2nFS759n9n2ctDnbfCw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU2P250MB0014.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:2b7::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.15; Thu, 15 Sep 2022 19:28:34 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::51a4:ed23:ea45:dfeb]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::51a4:ed23:ea45:dfeb%8]) with mapi id 15.20.5612.022; Thu, 15 Sep 2022 19:28:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 15 Sep 2022 21:28:08 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220915192809.2761301-1-andreas.rheinhardt@outlook.com> References: <20220915192809.2761301-1-andreas.rheinhardt@outlook.com> X-TMN: [LGckI718TqxeMfClZnc+1N1bSBUmr7IXYJY66fVWRm4=] X-ClientProxiedBy: ZR0P278CA0117.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::14) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20220915192809.2761301-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU2P250MB0014:EE_ X-MS-Office365-Filtering-Correlation-Id: fc84d9b4-d03a-46c3-8c46-08da97507aba X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmpAR802nmGrLwq0M+pXiNje7CC63EKd736FU7hQU/OGpwa/RSqynow9jlmkv4gslZQArEz64EOfYMiqWjotZcn/7mbSGimrMUzaqDIl2cA4IZtxiPRRa1zNAmRpZxwvPanCXEVCR5Ix4gDL8HJCBIjk/ItzMlY7rA+OUEHGEZa7kz4lt+Z6MBraNOQu6vwmr9rpC0M4fheAKyPV8GT0hmJgQbz8MMgLyiH2ZZijB5KUA7lvO5F8IoeFum1n59NM0hfe8D8JUtVOwVLiHf3IgHDtchJmJIuJW7x7KrFZE9q3vquvrtjEgQJwzH1fGJ1NZ4sq2mAiH2JruQBzzAfJm4q/Xo/R2fXplBJfpIOj6NhffWVCSwZib5GqMBUIWbTG/5Q9v1qrFI7xlXGeAM250tsSb+Q6wGXmQsnXKbz/DfhwzHEogqSo3HO/YzdpBTErLBhnW41HYONpGJunlOCNsZHJbE1W2tuPnaaHnC/l9Fa+aIAZOXCaNC4c5HrBJkNezPya2E3GRQKRswop9r8Hn1VdwMepbRc2vyc48MGFjv1M1ZEgiRbAo3LAcmq0x7G47Hqsze9iCY9+AaRWdjvqYGFsOGarfkulh13/ierwo1YYfsibJcH++R4kXbfbhsrWwaPXHl7NCORXVHx8VKIWUsYlmYckw8o3BXC/M+q16qtOLTFnBuaVutYlp8Zmiws7+zy5J2Ov6udFEpGc/22z21MaF3Jw/m3uiI3kOzz1ELvgwc+wMYA4CFPhjw1axMCiKX0= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2SE8jWqRcsvVJm4Fe9FQsKPcUJVzs4578zy1AR7EqM0abgdnfM5Cxnz3tIbCOXIB4i1CZnFiJwzUNb+D6IV7xvtkvO6Fj3gisjrDAP2Kk9qw/ZsWB/jkN8tUsqymcEkqbxIalblji5qBGA+GDw0qPJg1Ce10dxcAPRTaJlFUffzBeh5hrYDSINJZl9TH4jvNckTM7BAAI9BYN99+NC5LdZHK5SNaj8mRNOuQ5nZ1WI5rfCyChwh2M781jyVx4+CMCN4VrM5XXpoX145B2MNmNR9JZO2BXHtZiOtxIDjW4LHwygMllaQlT7Pxr2bnI7aNw3yFrthz1rIBvPybWv28oGJR7ug80g7EPiN3jWrcI94aX4BmcbbVQyg/izfsW476gx4kf+b93yVezQ8vlfrKo40b2ehlzXmukUFVpwvtooCTsaTes/lUDN4fTVl+RgZ74OCwEhSxzXiTcnaAkU5h2xd0gi05iGqD5fj5C/z/iXcvx4/3/n7929QDzDFAMjCmXXNfE5KibqXyDC/8A8CFI4LbwDrDaIYCWXzAK9nq2cCE23mNnxeSvq+eGwzyVk9YfoYr7u/A71gK6AAxsxFRQiNqtXuu2sDycYRHDD3Xp7Ki36s95McUxhX1S7csB1wz X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HPAldtwkAfREVN7XMHCcrtaXWX4jMB5QlHTYdvOb4M2xlliOknn0DUj83b4z55lAGYiA2uNOVhIceXBpC4oQICBWkFEAtZKRgrJz9FMOOt2pcvlCBbdp9AoNBN8fMM/+TD5vle6gHaU5QC/jvN+55eO9hJxVQJgLUF0mq2Bs1Pl1c+AikxAvhUOa26E2LDpoo/ZcHvOBwzr8LsCkbV4vT4n5jkZW/6LmUvs/50plFDjjXtp2LZYnC0IckAS/+rG+Zkj8RAppBM2aM88vIGghpVK9QyCxHDqB8V5nArMDtD7SY8a0LyxD82T091gGJxfS6NW5p+qBvL3JIN3tOPl5Gw1pbKAtHHKhCKi+Ge5yMwDusadeYXNQG7+Mi4Awu/4Nunx3vjjt937YNhVk6DcmqNWmLqdtoY9UU0GIST2HTlVDYb/5rb39BSIVZr3f1CLq+9qbXL0XNB+YE1ltfD6NasS2uCPP7yc3iCRcxqvRm6LualhDpaq65XWiVpz2WWJnDnOzHL7pDB1rQAD24GqTW6/dpDDkMob7g4GQsNA9paaXwrgm98yF7YTem9WfeZrxAhPtrDvPVIGU6EOWlbXMTjQfTvpQF4oBu1y26/KwyxeOjRQCEIp33urfLsGj6DzONwRrf2mKy761s9/jwr/ch/Iyayp8it+lXPR0gSN8pt+wqqjLQ2EtjZeaO9bMuImJKPobBuu94ffMImn6w5Q4XoqRrn1gxADWMDm2j234ifPxa8IENiANx/zlJHCc9JbPYZWjVdAC8Vno1oOxMveqGNRxfblmohmxxRjlVlAs10DYSBs5KUq2CFZbmBgYCt1hG1PshJh7OfqUBV2ior5zRh9M7eEDUH8CwDCz+oZ4pHneyu+3gOwCrL/lqNB1C9ZQsf1hnyGtYgihILzL9y2ijjcUcpE+QmnnQCZYnRAQH9dIPbcAJCimBLRkAN8w10eTkb+MxG8XmPjFVrsGfYn/PYsvuRPnvu+kqamdxf4uVm0QESSppwJhUwbVtf5mddAPGV7OYLGle4yNLgUEawT+eZ9cew+zxXzSNDmtI5i2pJvsDB98Av9zwOMjfl5xsYRjhSRUWnAaf5sqn9Rtqjr8bK3uGGPiIKD71SS5Srg2B7t+ABR6lR1LPJJs8Y/WMQ+WoNR5y1/piTqQpR4VWezuJsgVb27Pv+iuKqoh8ZGoZTLUpkq/n5gnTbq8VQvub/LtOOpPKjvT2+zS0ZcaJ8l98xaaWElUs3j/876sOKjAU5F4ZW2BQX5CySts7ntBdMojvovQBmBP/h2D8wuw4UuFZKCHiL27OVqUSqeDLbdKjvs= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc84d9b4-d03a-46c3-8c46-08da97507aba X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2022 19:28:34.0289 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0014 Subject: [FFmpeg-devel] [PATCH 8/9] avcodec/encode: Enable encoders to control padding of last frame 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: xKRr9DkpMtSr Some audio codecs work with atomic units that decode to a fixed number of audio samples with this number being so small that it is common to put multiple of these atoms into one packet. In these cases it makes no sense to pad the last frame to the big frame_size, so allow encoders to set the number of samples that they want the last frame to be padded to instead. Signed-off-by: Andreas Rheinhardt --- libavcodec/encode.c | 17 +++++++++++------ libavcodec/internal.h | 6 ++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 9bd9f9bc08..049b71c6f4 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -127,12 +127,12 @@ static int encode_make_refcounted(AVCodecContext *avctx, AVPacket *avpkt) /** * Pad last frame with silence. */ -static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src) +static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src, int out_samples) { int ret; frame->format = src->format; - frame->nb_samples = s->frame_size; + frame->nb_samples = out_samples; ret = av_channel_layout_copy(&frame->ch_layout, &s->ch_layout); if (ret < 0) goto fail; @@ -406,10 +406,15 @@ static int encode_send_frame_internal(AVCodecContext *avctx, const AVFrame *src) if (src->nb_samples < avctx->frame_size) { avctx->internal->last_audio_frame = 1; if (!(avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME)) { - ret = pad_last_frame(avctx, dst, src); - if (ret < 0) - return ret; - goto finish; + int pad_samples = avci->pad_samples ? avci->pad_samples : avctx->frame_size; + int out_samples = (src->nb_samples + pad_samples - 1) / pad_samples * pad_samples; + + if (out_samples != src->nb_samples) { + ret = pad_last_frame(avctx, dst, src, out_samples); + if (ret < 0) + return ret; + goto finish; + } } } } diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 45aec38a60..76a6ea6bc6 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -62,6 +62,12 @@ typedef struct AVCodecInternal { */ int last_audio_frame; + /** + * Audio encoders can set this flag during init to indicate that they + * want the small last frame to be padded to a multiple of pad_samples. + */ + int pad_samples; + AVBufferRef *pool; void *thread_ctx;