From patchwork Mon Mar 27 12:28:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raphael Schlarb X-Patchwork-Id: 40870 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7a30:b0:df:834d:2c1a with SMTP id t48csp1288192pzh; Mon, 27 Mar 2023 05:28:38 -0700 (PDT) X-Google-Smtp-Source: AKy350b6XsPTaLW8wxwucoR0NiEsrKzXi4tHisbYfjFomnxiwYvNzHw1uRXtrA774PPAA1vwQT/S X-Received: by 2002:a05:6402:1486:b0:501:cced:9c6c with SMTP id e6-20020a056402148600b00501cced9c6cmr11642149edv.7.1679920118489; Mon, 27 Mar 2023 05:28:38 -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 b6-20020aa7c6c6000000b004fdc9500acasi6920082eds.463.2023.03.27.05.28.35; Mon, 27 Mar 2023 05:28:38 -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=@raphael.schlarb.one header.s=strato-dkim-0002 header.b=dAcMnlvM; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CAA1968CAA5; Mon, 27 Mar 2023 15:28:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [85.215.255.23]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BAE0268CA41 for ; Mon, 27 Mar 2023 15:28:26 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; t=1679920105; cv=none; d=strato.com; s=strato-dkim-0002; b=PgbBcqk9Cp7l02qTLR9EoweUvWD93oX9tNGqDHHpD2T+nulrgIDP+7SZBEWoiNT6A2 NwcOi/Lhq5RiH85pCHFk/fron1KExi8ig3r3mDTdrqHKHU9EyoD/BCWZIzx3mzy5YPdS 024nfun/uEJz6FdgrepKjob3B7ZAV1m9qGUtux6+uP5nS8QsNXgFJi7kCvJrkfC/cnsS JpRonTRXMckL5adZ8tWKy/M0GOv26lrv+z9HEjVf79Xgny8RWhd0kk+n2V5vvOm/ctNF pWqOYeQPtg1MO8Tr8APvmkcca5okoZ/L22JRMQSxMgl74rfEAwlDzxjbsfJlqcx7ofR5 ERuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1679920105; s=strato-dkim-0002; d=strato.com; h=To:Date:Message-Id:Subject:From:Cc:Date:From:Subject:Sender; bh=jveaCJGC2wmzsxK+sywTJQ9XsCv9d63Q4XIsZTQLWg8=; b=IB0c1uoWrwbsCqSJZIXCS4nRkOXEejLjq4PmXsGYwQp8NEQBnW3rSZBH7Abx4Z+TbJ I0lGkHdqNSfu4yjSrWdcgU7ZBiuexcktd8pMBMeBIvy+jHrKkCU48aih2uskrU1w0mJS voTnuE9yOA6hSp6v4Z5H9pqd/vxrAhhxU70DTSVuGak8eGMZgBwsoTGsxEh4tDsf2mFu 0ex90TR4ESYffd88X9oIRsyppkSCyq6s0jfoD4Eo86wfa0ItcYRE+O7at8KS+8fR3H5T YHqf99mdxj9mudWPhoQ3q9qMdIYEzwic/MokRA6hCfc9EzaNq2aPI4nrahoMEdo9Px0T s+fg== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1679920105; s=strato-dkim-0002; d=raphael.schlarb.one; h=To:Date:Message-Id:Subject:From:Cc:Date:From:Subject:Sender; bh=jveaCJGC2wmzsxK+sywTJQ9XsCv9d63Q4XIsZTQLWg8=; b=dAcMnlvMK89K+8bj9KS5cafhEu8kzDjzuJWoI6vSwUXgLQHh0PudlkOGIOr+bUGHy+ ki9wrUpMhWrn9cT9s6dlAte/QA4wZ2aYMQU0Az13Cy8No7fO7IACy+uzoK39UPKcSsV4 eNuObldTBNM2xaP3wMkgumhGNHmYW7LDkB2Mc1CNv7Wc1aNojHJwMV5ZLFCTPmVMalD6 rMFjo3NQqbV4ZUh9z8IwmeeuD+9ZYudIX3AaO0xd0dHTXosTuhXx8s5PYGb1w8QoCzFa lM2NiTaImypDqLHaAcuPQvjB5KtntGpJ8tjoJbmSHkoIgu2bwPipIIJ5ScTzgdixhXuz T74w== X-RZG-AUTH: ":JWICemC6eu9onhfKbZGTjJwkwXmGAZo82ZIOw0E9r5fEuAXuVCTFHYOt3nIoLLr/joF0MIy9kgScxNmJ" Received: from smtpclient.apple by smtp.strato.de (RZmta 49.3.1 DYNA|AUTH) with ESMTPSA id Zce1ebz2RCSM12J (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve X9_62_prime256v1 with 256 ECDH bits, eq. 3072 bits RSA)) (Client did not present a certificate) for ; Mon, 27 Mar 2023 14:28:22 +0200 (CEST) From: Raphael Schlarb Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Message-Id: Date: Mon, 27 Mar 2023 14:28:13 +0200 To: ffmpeg-devel@ffmpeg.org X-Mailer: Apple Mail (2.3696.120.41.1.1) Subject: [FFmpeg-devel] [PATCH] Add option to encode short aac ld/eld frames with libfdk_aac 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: 47xjUc4q991M Some specifications require the size of ld/eld frames to be 480 samples instead of the default 512. libfdk_aac provides an option to set an alternative frame size, but it's not exposed via the ffmpeg interface. This patch adds a boolean short_frame option to encode ld/eld frames of size 480. Signed-off-by: Raphael Schlarb --- libavcodec/libfdk-aacenc.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index eb97e0fb41..bd719850dd 100644 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@ -55,6 +55,7 @@ typedef struct AACContext { int metadata_mode; AACENC_MetaData metaDataSetup; int delay_sent; + int short_frame; AudioFrameQueue afq; } AACContext; @@ -78,6 +79,7 @@ static const AVOption aac_enc_options[] = { { "comp_profile", "The desired compression profile for AAC DRC", offsetof(AACContext, comp_profile), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 256, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, { "comp_target_ref", "Expected target reference level at decoder side in dB (for clipping prevention/limiter)", offsetof(AACContext, comp_target_ref), AV_OPT_TYPE_INT, { .i64 = 0.0 }, -31.75, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, { "prog_ref", "The program reference level or dialog level in dB", offsetof(AACContext, prog_ref), AV_OPT_TYPE_INT, { .i64 = 0.0 }, -31.75, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, + { "short_frame", "Encode short LD/ELD frames, using 480 instead of 512 samples per frame", offsetof(AACContext, short_frame), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, FF_AAC_PROFILE_OPTS { NULL } }; @@ -166,6 +168,17 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) } } + if (s->short_frame) { + if (aot == FF_PROFILE_AAC_LD + 1 || aot == FF_PROFILE_AAC_ELD + 1) { + if ((err = aacEncoder_SetParam(s->handle, AACENC_GRANULE_LENGTH, + 480)) != AACENC_OK) { + av_log(avctx, AV_LOG_ERROR, "Unable to set granule length: %s\n", + aac_get_error(err)); + goto error; + } + } + } + if ((err = aacEncoder_SetParam(s->handle, AACENC_SAMPLERATE, avctx->sample_rate)) != AACENC_OK) { av_log(avctx, AV_LOG_ERROR, "Unable to set the sample rate %d: %s\n",