From patchwork Wed Mar 29 15:59:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raphael Schlarb X-Patchwork-Id: 40907 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4645:b0:e3:3194:9d20 with SMTP id eb5csp635465pzb; Wed, 29 Mar 2023 09:29:27 -0700 (PDT) X-Google-Smtp-Source: AKy350ZJrgedQKlIg9ZTfaw4tjJWyE3m1t2hVpVxY+Wv0T1hhIw9HIAzt1/ZPkM8F4J+Fg1eQ5da X-Received: by 2002:a17:907:c209:b0:944:5d34:2111 with SMTP id ti9-20020a170907c20900b009445d342111mr14002120ejc.66.1680107367384; Wed, 29 Mar 2023 09:29:27 -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 bu22-20020a170906a15600b00932748b1661si29114447ejb.252.2023.03.29.09.29.26; Wed, 29 Mar 2023 09:29:27 -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=J9yQaDqx; 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 CF70868BF12; Wed, 29 Mar 2023 19:29:22 +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 [81.169.146.218]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E30A468C2B1 for ; Wed, 29 Mar 2023 19:29:15 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; t=1680107354; cv=none; d=strato.com; s=strato-dkim-0002; b=RYJp02SMDcXoR7exZcA/2I/hQCUTSyeExUgPCXYkGI/rnWrcuX947zJdAhJlQuPmgq vNMHcGHq/q258ur3Oz58VQnxEe6Ik92ZfUx+oUOCohmcVFjLIEF4023Q3JW3alQlvB7v 3pZ4R1lGxMXJzlIEsIZdUcN2Qywrxnr9ppjoGzMCBPPl4l6N+THZxDGoWIRVcz1krgNu /eTpmLjFPgcT/3TGu77XnK+Y7NO1PbfAOgJz6l6nk1Myk5UfUwqfkfeLQg/FUqYWaWaI GuxpLW1oYMkoz7SPVk3at5lG9f8FWLmFR7NJJWo1dxitbQBcZEHdP1CV+RrLjbmJKFfT Ibmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1680107354; s=strato-dkim-0002; d=strato.com; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date: From:Subject:Sender; bh=pnytEkVd/P/Es3xTUWfajgCvt+FfaDIr71ykFbA7T88=; b=S5Amwgu69WNfP+vz/oXPyKl3QLw/bAansyd2O8ZaaIgJEyOqZhVW6E7mHkOpqXy9ss 00mNXA/Cszf6wpdZuvoTdeAgBycTCJcUc7v7sjmfgG5RGrT8gcUDnCsuqQrWFmsFc2j4 sAZqaKTkyBiKZ/mbXoaNIXK23OZCo2NN0UoQM/OAx9nMuxRFTkdZ/Pl41Yg0GSbrbml4 3nsa77lytCHf+yR6Q1Uimv22yMGYdLj74mTQSf6epxFdyZykOCwrqB/YDu5Fk22q2rtv iCGnX5aZHXYqQb/WElHrzWapo5zqsurcSYOsusyHMYrXTgAjyn0qeTgB5bbftbQTr5gA IfIw== 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=1680107354; s=strato-dkim-0002; d=raphael.schlarb.one; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Cc:Date: From:Subject:Sender; bh=pnytEkVd/P/Es3xTUWfajgCvt+FfaDIr71ykFbA7T88=; b=J9yQaDqxDr7YiMvAlKCnuj8pFTIFVLij/CkFXLE94nD4vY4kPjiXxt5kqMTGQKR8Hv VLahRlOFeXMRwKLxy6U9GvZOZQ4RTGGLfqn8N/S4cExmdNXVYOndqMsF4H3+GCnkBqUN Drhuq7M+odk6aWSrJU9nldDfbwdQUe0TYir+USN+SelwtnrsUwrPUp6uQQePBIiF4t6E /QAHWslyZZ4NXR4PI1R7k0IQTlNfdcFpuW8wyXWORaKBej3PeYtmG/0r/L9y1GUjahZE OOFVzQf3QN3zp5X0ShbR+RWtrYlwAg3s43KIaujgmClYsngJwNSFJQ6cfy/1h8UCmXpX Lcyg== X-RZG-AUTH: ":JWICemC6eu9onhfKbZGTjJwkwXmGAZo82ZIOw0E9r5fErADoWDm4ELNez75QlQ/2G0JlcAyQuQ==" Received: from archlinux.rrz.uni-hamburg.de.local by smtp.strato.de (RZmta 49.3.1 DYNA|AUTH) with ESMTPSA id Zce1ebz2TGTEF8R (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Wed, 29 Mar 2023 18:29:14 +0200 (CEST) From: Raphael Schlarb To: ffmpeg-devel@ffmpeg.org Date: Wed, 29 Mar 2023 17:59:33 +0200 Message-Id: <20230329155933.2138-1-info@raphael.schlarb.one> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230327143705.2371-1-info@raphael.schlarb.one> References: <20230327143705.2371-1-info@raphael.schlarb.one> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3] avcodec/libfdk-accenc: Add option to set frame length when encoding 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 Cc: Raphael Schlarb Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oBNhiZArxmQn 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 frame_length option to solve this problem. --- Added missing context to commit message libavcodec/libfdk-aacenc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index eb97e0fb41..93c26ee082 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 frame_length; 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 }, + { "frame_length", "The desired frame length", offsetof(AACContext, frame_length), AV_OPT_TYPE_INT, { .i64 = 1024 }, 120, 1024, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, FF_AAC_PROFILE_OPTS { NULL } }; @@ -166,6 +168,18 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) } } + if (s->frame_length == 1024 && + (aot == FF_PROFILE_AAC_LD + 1 || aot == FF_PROFILE_AAC_ELD + 1)) { + s->frame_length = 512; + } + + if ((err = aacEncoder_SetParam(s->handle, AACENC_GRANULE_LENGTH, + s->frame_length)) != 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",