From patchwork Wed Jul 21 04:08:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 28994 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a11:4023:0:0:0:0 with SMTP id ky35csp6321687pxb; Wed, 21 Jul 2021 06:17:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxTnppXz3H33RPh4xooE2CFFLiuL7bSgKvKwMgy8nglY27BAoL8pFERd54QBzd8rJPbfknD X-Received: by 2002:a05:6402:1118:: with SMTP id u24mr48212559edv.229.1626873427667; Wed, 21 Jul 2021 06:17:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626873427; cv=none; d=google.com; s=arc-20160816; b=S/6SbC1uyTh9eINc6CtFeuTokKQOfLPO0/JEkLvVfAjArDzeJF0AV6u6SqlA/fgJ6P YtPVzCNUpMdbJel6yeK37l9FOtywmokif9UE9Y/Q83J38rWtdzQO+vvYJlcWhcuxZz91 OlNYibjhFCyW5itF7PahkbztNtpo6iGWIg7PhF2HBvfO/ZA8nwan91JF4DBs/XBPxg35 2ORL/zLPywHMgstwdqBcNhDFZDUJYoAl2dT+m8OJ3MXfj5bO0u3NUPZxu+WZjPB8tNxg FpoLaqxKZkps0NA68nU4oWqrsAkQJXyttcThoIsH8CWSJW7LejZuKlJSFre3yoVnwQWf /1iA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=mxsk7PvHPXKVfzSxqbCFo1NDUwEpaMAXBzAq26vvMSQ=; b=CgrMtJ51RJg3fEwJUjUuLSu9N6IQ5l2S98HxhN4AW62QW4MzXsKSEBMSl67BDWfj3w e9WKgnFK3siiZaBVxLfPpY9C/5oJzwqRa4WUx7tpJTDX7pjQPjB3brZs3acY/QCLzgLf Wf3+FloD7WdLzE0O473eWh7zHo2g6qArkUUfDDDipql+AxMBaVFjWXtqXUetJ+sR9Smw dmmLBvm6Sw4W3+mgyMm6btJiuL6EPLWigdEn+Wt/M4ph6dEvRDrnMZvgzZi2Mh+z+1oF m1Am9g6oSRKvomeZiZTl9okpxuC945AU7zZ64MMludD3WNIPvzoYPKF3HlLin+QAaKAk wTeQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=jjns2eNU; 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 v22si13601496ejx.36.2021.07.21.06.17.07; Wed, 21 Jul 2021 06:17:07 -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=@gmail.com header.s=20161025 header.b=jjns2eNU; 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 C504A68A990; Wed, 21 Jul 2021 16:17:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com [209.85.167.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E125968A976 for ; Wed, 21 Jul 2021 16:16:58 +0300 (EEST) Received: by mail-oi1-f171.google.com with SMTP id u15so2820404oiw.3 for ; Wed, 21 Jul 2021 06:16:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=w+6iVdBqXYZ0OFk1AcnSyTFrZlwBIy7EMWvuNuXbfBk=; b=jjns2eNUhlrmdaTT/NTbaPEdDUUE/DenLJQP31pA/6NX0Dr5LQcBYg9vXTPXwsvMGk dVhUsiO6PxpLnRPu23ybxwoyKNlSAcrXkT4XaatHLRbYE5IO7wrMpag28mJQl3jTB81G JL1TnRDKD5FwcijrF1HzJZwgL4gqcEU5csO5g4Al6zGLIBmPnssl1XLtoGDl1dHPUHEk FDUaC+/BuGZU3rqqmi1HTXHja7Y+GyZSfX5TqZQ7JE9gvxMyN9eM1LHFIE5gKyfKBtTF 5Lpw9QWbBNB1HwKQPHmokFxbvelljH8ebShPs4DCRPkn1dX4VmCRY1SLWtriNNidcsfH Brug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=w+6iVdBqXYZ0OFk1AcnSyTFrZlwBIy7EMWvuNuXbfBk=; b=RbcqMc0HxDLu7NdsR5nm0PZ9O5pVGeGMSITGaa789J/JSZ47j+0ulfI00rbFzGV50Y ZrmF+2lbQDIEh47qkusG94W0eVMImUsCDqJ/QtY7gRKLt0rUvOrtFEgVVJHIn3/2KfDV P7kksZO8wLDyBAN0Nl1SHaeMFU0yFjsdISDMd9iPTkdZ2weXuGlhzj4LjHwTeojfDxel SO/FJ99RXjNqqDWQxLjvsFTZgQ2wPGqcFlU9iiuYAobZmXkrfxNQLCHiFngkAMh05JdI +cTU3MLjgbcCOOrpeRFe7oSv0hCoAb55yNhXyuCPyS5/LsQlcwUrIBt/hjTfEjRxfwAo nmVQ== X-Gm-Message-State: AOAM533QKTXnsR5h6zTxd01+jBrvmbuKrkku0zDLpKmw6fFTum9Vkbn2 MNAGVsKtlotWmnNr3/GAgHXbypAB2Tw= X-Received: by 2002:a17:90a:4306:: with SMTP id q6mr1761847pjg.202.1626840516791; Tue, 20 Jul 2021 21:08:36 -0700 (PDT) Received: from localhost.localdomain ([191.83.217.217]) by smtp.gmail.com with ESMTPSA id i18sm25261635pgb.83.2021.07.20.21.08.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jul 2021 21:08:36 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 21 Jul 2021 01:08:12 -0300 Message-Id: <20210721040812.8429-1-jamrial@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/utils: don't return negative values in av_get_audio_frame_duration() 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: REoWHALs9Y8z In some extrme cases, like with adpcm_ms samples with an extremely high channel count, get_audio_frame_duration() may return a negative frame duration value. Don't propagate it, and instead return 0, signaling that a duration could not be determined. Fixes ticket #9312 Signed-off-by: James Almer --- libavcodec/utils.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 88e88bc958..e0d5b2f536 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -810,20 +810,22 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) { - return get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, + int duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, avctx->channels, avctx->block_align, avctx->codec_tag, avctx->bits_per_coded_sample, avctx->bit_rate, avctx->extradata, avctx->frame_size, frame_bytes); + return FFMAX(0, duration); } int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes) { - return get_audio_frame_duration(par->codec_id, par->sample_rate, + int duration = get_audio_frame_duration(par->codec_id, par->sample_rate, par->channels, par->block_align, par->codec_tag, par->bits_per_coded_sample, par->bit_rate, par->extradata, par->frame_size, frame_bytes); + return FFMAX(0, duration); } #if !HAVE_THREADS