From patchwork Mon Mar 27 14:37:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raphael Schlarb X-Patchwork-Id: 40872 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7a30:b0:df:834d:2c1a with SMTP id t48csp1383896pzh; Mon, 27 Mar 2023 07:37:34 -0700 (PDT) X-Google-Smtp-Source: AKy350Y7RnWs6Cs+kqu0pJbpQxjFykxw0G3Bc6Xe+SwN4w8kPS6ikmlLR8I0QTlaB0yJXlhfPehB X-Received: by 2002:a17:906:7243:b0:932:4cbf:5bbb with SMTP id n3-20020a170906724300b009324cbf5bbbmr13353167ejk.19.1679927854616; Mon, 27 Mar 2023 07:37:34 -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 yw7-20020a170907244700b00930a6858cd8si26884949ejb.454.2023.03.27.07.37.34; Mon, 27 Mar 2023 07:37:34 -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=mA1qbnwY; 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 179E268CAF1; Mon, 27 Mar 2023 17:37: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.21]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 06CF268C461 for ; Mon, 27 Mar 2023 17:37:24 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; t=1679927844; cv=none; d=strato.com; s=strato-dkim-0002; b=ATvkYcX7js2CNQ6M7q+JZo7p8/PtB4oLRCDgUG+19u6KmS46MU+WL9KCrUgzMlpk+i IfWeQGa2lxrS1BQLm6ESy2ISnQQP2fWAb9LkBWmVg2u5e7Kd8Ul7w187al7OHXqXQpkn S6WfYScJzzr8pCWixXGq5RE2V67kDQY0E0EK7aNSNp3ZqBO8WY7AQ8nHkvojnMQovk5O QaANvy8l2gvNX2yNKZl82PZfKcaQGA6LhkNii+MOZR4/rrSEjoSQ+nPfbPh68KsuQoyU Z1ysJ47rGYP5ys073t5xOMk7e1mnN4u+vjZldLUyakgCszWD7xLt44YXI1Ya27/gXM9p Shaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1679927844; 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=s6J9so/MhmYdqGM+NT2GdulGAtQmERtU90SE14Rn1EQ=; b=EOFf0omi7OINkWSRf89H5ei4YRur/Itzm/OEkMChbrH37Ldbf3IrVa/gEVTmZAg49N KqBX7wV/dBdFa49aDFx9IHoqNIqeWBR/jykGUv6uKr0wGW8xLABEpB+wZeGqnP3bUv4i 8oyMs3X5jd6+Op3iWzn+PBB955IuiCL+SyX2RGrSkI5AYDGeZ+b2gWisjFnDjrK9xJCe f/ziCY7m/Cyj3tiBS4QvWBbBjadx3VTexLv2uWIEocW/EKcQfyKx5WtogBoTK8OdNaav KSnojXIkKHnoKVKfqaSa7oiwdvqF8IMbPNs69/8zCZGL8Ks3/s4PrZj9Oz0oVmoz5p4X 3dPg== 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=1679927844; 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=s6J9so/MhmYdqGM+NT2GdulGAtQmERtU90SE14Rn1EQ=; b=mA1qbnwYZzp/JGuLTHCGKyjLeMwp72Eq/i9kyXb3zWRiB/2jFAqziZlfDsaq1TRwvX Beqe9ZnB+BoCcR4svptU8kFnqTpL/AfoE+vQ8A7ucl8BbfoIdFRnMn5+c8998VpLEFN/ zqV9vNN76f5c1IxpNGUfCmKZTiqyCqrzS/qnR1b1zkgdHqTTCd/1IrmxTrMqafEoo9bN sz3o/T9jxiJdBeUfu4vYvRFLPl8B1+Kr6s5NsnwpImAciEVAzXen9CIidGLeByYVlmVe J+guJ0bQkRu026u0osNzr+VnfAgAdCC5bB3UoqqdHatMz9b9LwOymHjicCs2h7a1rNlt mnYw== X-RZG-AUTH: ":JWICemC6eu9onhfKbZGTjJwkwXmGAZo82ZIOw0E9r5fErADoWDm4ELNez75QlQ/2G0JlcAOauQ==" Received: from archlinux.rrz.uni-hamburg.de.local by smtp.strato.de (RZmta 49.3.1 DYNA|AUTH) with ESMTPSA id Zce1ebz2REbN1mc (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Mon, 27 Mar 2023 16:37:23 +0200 (CEST) From: Raphael Schlarb To: ffmpeg-devel@ffmpeg.org Date: Mon, 27 Mar 2023 16:37:05 +0200 Message-Id: <20230327143705.2371-1-info@raphael.schlarb.one> X-Mailer: git-send-email 2.40.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] 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: oxFjNQJtASsw 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. --- Thank you, this really makes more sense. Here an updated version. 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",