From patchwork Tue Feb 28 23:08:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: JonHGee X-Patchwork-Id: 40557 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:d046:b0:cd:afd7:272c with SMTP id hv6csp2408900pzb; Tue, 28 Feb 2023 15:08:56 -0800 (PST) X-Google-Smtp-Source: AK7set8yIw0zo42XEDJYlJtMdJeYYIg/5Q2Hg7mskiaMO1dI2FRaWGIwXabvvn2MqvguPmzND84V X-Received: by 2002:aa7:da98:0:b0:4ac:c29d:5c4a with SMTP id q24-20020aa7da98000000b004acc29d5c4amr5201027eds.29.1677625736093; Tue, 28 Feb 2023 15:08:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677625736; cv=none; d=google.com; s=arc-20160816; b=sbOU/ChXlvg6PkNtTdOqZnlI0j6OYvOXKlF7m0CtP2Xr8lsCA1fe0b7i50wYyArNc8 Mjdr9kY/LOPQz5fq5U4BAOwMw6E2lxw+NnubViW7D7RzM260lPbuT9XmVPr912Vl+9N/ tZIIq1z5odpS5yLzcp2edpvFg7L+OqCNqHG8kZ4vX42xwCAgaSEIga1yD1e/V/iQ9kUz Wq0Nnpt5lYqn8lsdEYhqjs+lYRLNrbDuuJLvg9MQExKbJEseVVyunB2Hea/Pf+WSfOGJ 34dnElCcYdlzlS28CFDxlyAjKotWT2yaqxwvxVp1ze6OAxru3TeWzdYlLYuY/ONxxJsO qJOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=MtN8CbgWwkVk0YmHUVk0oaYQ0KlXSvss5QeH3ihiL8s=; b=e1qC8q+ijoylNEACwE96yFrI/xvv0RdIDNemmqQ3lwmd+RYt5re8mt9U/GwJX3IYrZ 9Qc/8P6e4APHNFB9arz7kwWA+VfYj/qYaZwKuVT+qHLokUJ37XCUa2ri65UVbipLfOLm sdYBpWF6BIaQhkqDhe7Je7mg2XaywYdOz5MN6r6p1X7s25IYWO+c9elByXjwjQk4mxm2 71W6tXeleL5G68mqvBa53t7bGvmIYWDVEwUNqQd9cVCYfw7/1am8BFNZUaYxQRV4YmAN /VnK1FhKOALcqsy6r3QNl2F6oLgACz5YN+f7I6bzWWwyp1Gd/ucMdWJ5KLXdcojsZ2TJ ICXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="B2/E6GZG"; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u9-20020a170906b10900b008c3baa1f86asi12733062ejy.851.2023.02.28.15.08.55; Tue, 28 Feb 2023 15:08:56 -0800 (PST) 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=@gmail.com header.s=20210112 header.b="B2/E6GZG"; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1A3F568B164; Wed, 1 Mar 2023 01:08:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D8A968ADF2 for ; Wed, 1 Mar 2023 01:08:46 +0200 (EET) Received: by mail-pl1-f172.google.com with SMTP id p20so10909172plw.13 for ; Tue, 28 Feb 2023 15:08:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3Wfy7AzeJQX1VOzFtuPY9mcC51aiwhNbvdrr4sLCKa8=; b=B2/E6GZGAfzl+EuMhiMpfWrt1TGfKkwDMeKhM4hv+QzI2Ty/yC60GnIpQx/vDjv2Wo qQBc7kd+LElVcL/zuog9fyYKiTSgV4d7A4gyoh9MIWiwYRqH0Mz7kXV6B2jH/u768A4E dxkT7AipxOKynMYuD0T7GuBIIfaorEhyBBbHXkcX/i3xIrlZxli7GI1pHs9141zmB1+N 6OprcEKQExthE4Xl6M7nunrF8/VprHFgBFwKqKq0DPwcN3LS2RIUpvJAt9nWfQCKYufF YUCKFCNN6nof/KqZrOfmHF4EdtWX8xieALPiyGFJceCQfKLODbiqhQgyA3zCNodRWdeC xmeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3Wfy7AzeJQX1VOzFtuPY9mcC51aiwhNbvdrr4sLCKa8=; b=Ly3WwIrfzUo0MIMZNbPGgeuz9bhwEEPQioXTK1B5j9Vg/1E8n1tS6hjBVc8lxhfOzu bnfwMRz94rus9EfrF1NOn7XOh2dZHqbl6zyE95TGIo44WrGayWc5fcWTKRAMNWHEf/LW zMGVMKPL1GMBSB4C/EFGOUa4tZK+rAaH/+3EaT8lWt2ekmsH36OTtRQCX515RyTLbHA0 b5P9pjAfZWq4AqT4NP3tRP0/bE0CjCO+hSsEHGZemeDw88i0a+ks1S3gd6azt+ivkvXB VyO7v5kJmqpGLWvaEFVeeg2bPGRNFVAQF7TX0qw2HtTy8svnNIVrIrbnvq6pBcvFhjcx 42JQ== X-Gm-Message-State: AO0yUKVK39AcsV0xmOOey5p/8qdYGEs14GFcd6N4w+48bAWWmRz7ksBf 6LagrMC6cHSH5Ysi0XeIMPj0GpzHjFtyxA== X-Received: by 2002:a17:902:e5c9:b0:19e:4bc3:b1ef with SMTP id u9-20020a170902e5c900b0019e4bc3b1efmr830617plf.64.1677625723389; Tue, 28 Feb 2023 15:08:43 -0800 (PST) Received: from jongeegti.c.googlers.com.com (170.102.105.34.bc.googleusercontent.com. [34.105.102.170]) by smtp.gmail.com with ESMTPSA id jn22-20020a170903051600b00195f0fb0c18sm7036988plb.31.2023.02.28.15.08.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Feb 2023 15:08:42 -0800 (PST) From: JonHGee X-Google-Original-From: JonHGee To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Feb 2023 23:08:10 +0000 Message-Id: <20230228230810.4115241-1-JonHGee@gmail.com> X-Mailer: git-send-email 2.39.2.722.g9855ee24e9-goog In-Reply-To: <75b9dd84-a20-e85f-2e1-f37716b780c7@martin.st> References: <75b9dd84-a20-e85f-2e1-f37716b780c7@martin.st> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacnc: send encoder delay/padding in packet side data 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: JonHGee Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: t5C44M2WDORw Signed-off-by: JonHGee --- libavcodec/libfdk-aacenc.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index 54549de473..954ddab07f 100644 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@ -21,6 +21,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/common.h" +#include "libavutil/intreadwrite.h" #include "libavutil/opt.h" #include "avcodec.h" #include "audio_frame_queue.h" @@ -46,6 +47,7 @@ typedef struct AACContext { int latm; int header_period; int vbr; + int delay_sent; AudioFrameQueue afq; } AACContext; @@ -368,7 +370,7 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, int out_buffer_identifier = OUT_BITSTREAM_DATA; int out_buffer_size, out_buffer_element_size; void *in_ptr, *out_ptr; - int ret; + int ret, discard_padding; uint8_t dummy_buf[1]; AACENC_ERROR err; @@ -428,6 +430,27 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts, &avpkt->duration); + discard_padding = avctx->frame_size - avpkt->duration; + // Check if subtraction resulted in an overflow + if ((discard_padding < avctx->frame_size) != (avpkt->duration > 0)) { + av_log(avctx, AV_LOG_ERROR, "discard padding overflow\n"); + av_packet_unref(avpkt); + return AVERROR(EINVAL); + } + if ((!s->delay_sent && avctx->initial_padding > 0) || discard_padding > 0) { + uint8_t *side_data = + av_packet_new_side_data(avpkt, AV_PKT_DATA_SKIP_SAMPLES, 10); + if (!side_data) { + av_packet_unref(avpkt); + return AVERROR(ENOMEM); + } + if (!s->delay_sent) { + AV_WL32(side_data, avctx->initial_padding); + s->delay_sent = 1; + } + AV_WL32(side_data + 4, discard_padding); + } + avpkt->size = out_args.numOutBytes; *got_packet_ptr = 1; return 0;