From patchwork Mon May 20 20:16:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yigithan Yigit X-Patchwork-Id: 49066 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp4768173pzb; Mon, 20 May 2024 13:16:29 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUkwTAOb1vAOAiqkIcMyZlwTsmacKtxxLg8mzzGT/z8hqnxVPpxGPAQ3wi3AqSBdzKoBwHhCPXcTTjsDYbJyLd7m1dtAq8sWcJErQ== X-Google-Smtp-Source: AGHT+IE8WcyL3EgdF1inL3UbLmDIbFNhiktrKZz/+9KsJozQVlnb2GpP1MX+q/psHxMA7J1MNBma X-Received: by 2002:a17:906:2c50:b0:a5a:3c65:ccc7 with SMTP id a640c23a62f3a-a5a3c65cff5mr1802851266b.75.1716236189169; Mon, 20 May 2024 13:16:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716236189; cv=none; d=google.com; s=arc-20160816; b=wapjs0TWr54EN/LUmu/QWjtJ5anWilXkNLb7Apu8UhYtyezgSjGHNPRCz+Rrxitchy ZhRfdxEdSdEMke+4dHcFqMlP1KTL7ELaOf15kRzRflnu2bo26MY1D86TxPkZkyHjXDEJ /qfqaNXhkxGLaBkr5NQfMgX5gm1WIiGtgLxTJFR+tNRebQUQzBseRv0etRS+IjuHpVGT 054fs9gwSgawEkT1YSAnEKoSUswFysVs1JH4Ztwl0IGM+hRQ4m3JXWW9PYRLBEKqPN9t qR5XaKs9BNV0TXMQYMOVdFYsBE3AFCuvxPHCu9rPo9TGrTXPRB75gdMVvPt0uFhaYn10 OcFw== 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=M9J+iH2zK4/HX/MoDvmE6a0tazbAhqcqX35K50QKAzI=; fh=oYrUj4vT4ivb560z23e71q/pal11/Mm+yKMO8RKszaM=; b=EponIc9Jo8XYvrIuSMC1h4/UtPP+49Od1CiKYwBGF0JcLs2+CcVeteyWGK888EQZO/ PU84uTXlBhj19oWyZ1SWXrF99KruSpoBCmFny6RxHhC09QF41+gMM0SPhF38SFYOqZVa dmi7f/6eTF8JaGf+jxdcxVB3J7Tcm3ZrFhhIglzdq4OtttasNbeqQPANGeGcIeZ/YSwb RRsMUOONfTmhQ8ZvE9v4Ch43MI0xdGnoJlARjZTnyYQgWH9ne17RaqoYvjHTYb4WI8RM pVqrAB5nscWxYwIl8Z2IuSGthPHwANhkM56AF9B3fdWhRGpIPhxDyPTzPZHaqW7N7eY7 vO9w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=EbIfKeBF; 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 a640c23a62f3a-a5a17ba4fd2si1365447066b.614.2024.05.20.13.16.28; Mon, 20 May 2024 13:16:29 -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=20230601 header.b=EbIfKeBF; 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 0814068D2A5; Mon, 20 May 2024 23:16:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 35D7568D26B for ; Mon, 20 May 2024 23:16:12 +0300 (EEST) Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-5755fafa5a7so2783560a12.1 for ; Mon, 20 May 2024 13:16:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716236171; x=1716840971; darn=ffmpeg.org; 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=zz10MfUToxQCOIorsRrk43o89JkcM4owO52Y+KUYq5c=; b=EbIfKeBFTCl/yvC8zM8W66qGTePo2GwXXRDfRIjwH+MrUeB/ddZQJ5WTw3eZ4/0mh4 vvYgOwBXG0WNkPXaPUIACRE4btShb3SL5Iqn7L67bgcOG4CCVCLQSIsccQJV138vaz0s oW8qWyumnLemUiszPctTuvnqapbD1wf9vTXL1IpZdTUluyGJdWz1Yk/kJJttZYID/QwV YD/lnzG573zrd2gaqETk3XrhItWhzWgfwQJIidWGBhIosiS2aeFkViHER1DZhMi65RLs FcBOQuV8UT4tSR3eBJYSh97Q7inHDPO0Slk3sb73XNEuLRwLetI+OxUS8Q68gTV0A51A IRxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716236171; x=1716840971; 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=zz10MfUToxQCOIorsRrk43o89JkcM4owO52Y+KUYq5c=; b=WoWSCHRpQv1bYdOZGkbpX1VbhA6fJ9rjbR96ZhT3PC6Ja/te8ERBJEbVb5uDCRmJWl GS/J2OLVZHv8AQZf/wj31OAtFgJZ3c6vk7aicu1kH/XsDH8wk1/2tIlX8T4FmnkuhChn oFvJJxMyfaUi3CR782KaWFNgiDOuVYy8ZocJrxfLmwuXeWm2VqoleEyW9xV7j4wygoRf LxDGai3Tk1Vjwf7FhyUZFHYDyk6ebYDLpIWT6wO7j+M+Irl+hBKKNNiM/O85zIHahlBd k1m2w5ZnCM6aTCiLTlhR6ZMgPbec8ZrfoYPgr+DeHMGTr+ZBz+6/CJzszfXS56RMEhEz AIIA== X-Gm-Message-State: AOJu0Yym9S7kZAwbhvrx/Q+Vrlc2SoUnH4bJqkJw0+S+D9hJcO5gJXBS PDno426o74RqGqREyDbC6Movu2aAwYXAUH6nOYj+QQs+iLoVX2wtdFXWFPTK X-Received: by 2002:a17:907:3f92:b0:a59:af34:25f9 with SMTP id a640c23a62f3a-a5a2d5856e6mr2407708366b.32.1716236171024; Mon, 20 May 2024 13:16:11 -0700 (PDT) Received: from localhost.localdomain ([2a02:e0:8bd6:600:b19e:f464:654a:2d9b]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a1787c6ffsm1498463466b.49.2024.05.20.13.16.09 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 20 May 2024 13:16:10 -0700 (PDT) From: Yigithan Yigit To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 May 2024 23:16:04 +0300 Message-ID: <20240520201606.90567-2-yigithanyigitdevel@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240520201606.90567-1-yigithanyigitdevel@gmail.com> References: <20240520201606.90567-1-yigithanyigitdevel@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 1/3] avfilter/af_volumedetect.c: Move logdb function 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: thilo.borgmann@mail.de, yigithanyigitdevel@gmail.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +KtHQdrcl5dY --- libavfilter/af_volumedetect.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libavfilter/af_volumedetect.c b/libavfilter/af_volumedetect.c index 8b001d1cf2..327801a7f9 100644 --- a/libavfilter/af_volumedetect.c +++ b/libavfilter/af_volumedetect.c @@ -24,6 +24,8 @@ #include "avfilter.h" #include "internal.h" +#define MAX_DB 91 + typedef struct VolDetectContext { /** * Number of samples at each PCM value. @@ -33,6 +35,14 @@ typedef struct VolDetectContext { uint64_t histogram[0x10001]; } VolDetectContext; +static inline double logdb(uint64_t v) +{ + double d = v / (double)(0x8000 * 0x8000); + if (!v) + return MAX_DB; + return -log10(d) * 10; +} + static int filter_frame(AVFilterLink *inlink, AVFrame *samples) { AVFilterContext *ctx = inlink->dst; @@ -56,16 +66,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *samples) return ff_filter_frame(inlink->dst->outputs[0], samples); } -#define MAX_DB 91 - -static inline double logdb(uint64_t v) -{ - double d = v / (double)(0x8000 * 0x8000); - if (!v) - return MAX_DB; - return -log10(d) * 10; -} - static void print_stats(AVFilterContext *ctx) { VolDetectContext *vd = ctx->priv; From patchwork Mon May 20 20:16:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yigithan Yigit X-Patchwork-Id: 49068 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp4768325pzb; Mon, 20 May 2024 13:16:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWXzPwVclbwoRFfajNzDrgOwQSovSTmOUy+N1x5cRVhlk3XUyLZQHogYXE8WZ9Ew4XLtWUYCSTK5S8MzCF8gnixd4GhlWCvaOGEiA== X-Google-Smtp-Source: AGHT+IH9r3N2Y7o3fPog+HlOurIxiDwpMnresBC/98kVES+oXo+7wbvFUjpQV3iOclenxyK/pEt7 X-Received: by 2002:a17:907:9405:b0:a5a:5b8b:d14 with SMTP id a640c23a62f3a-a5a5b8b0de6mr1829057966b.40.1716236198316; Mon, 20 May 2024 13:16:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716236198; cv=none; d=google.com; s=arc-20160816; b=xs9PxWMHt12iLRDyiHOwJE+mHo7VvZnmX0Lr3tXqyjDN9/XxshpTN2YzW7FileHK72 ciXPzcccjwyRCEhbwaxCUE27brvqnZAI9GKVLhHWJrgK9wIIG2pISnjtXwfDR71IJL5t iSIlpQpnVWPsT7u1yZY4AMbcXcVGeKKvtk5UB65Sx2b/t0rny7A1BoDzR+Ia26Hyxbqz w14dyswjOZ5M1o4WZ6+JB0X3XTKVXs9ArxslltN5/OrleAv9fy5rFC1CoYGhUjMPyHug drEtgJZpDd+yvPrIYAgY+4YU1uOYXQ9UX9c48scG6BcFvDg+CHKkeodpJ6dHpcpKGvmQ u37Q== 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=1312aOE6n9l91LYzCrP4C7b3bDgnyvjAg3KzRf38lA8=; fh=oYrUj4vT4ivb560z23e71q/pal11/Mm+yKMO8RKszaM=; b=HanmfWkJ2SxeoGZhy4AgnhZZJ0qVpZpBp2yyIHB186SX5CbCVUvwknKA3XhlslZmlM 7UZoOK3LdF/ujOWYu0LwdGMTUNfz4/0v4rz0XfoQygVCkuSD4IqznWWW/ay9PJzO4Zcj 37g6juMLXbALCJg7Biko1iPKhdzJ+uxhqQvNPotS6tHU5DAxUnOO2Enicw3TiM5P704k GMiExkog1cslZqYstQGw6DYVhm5XrhUkjB1WIpqpSm607cuWSXja2kfjlwdEZ5FOVg05 T2VVRsMUcpPRN0ENHHft4AuigoKSnhsr395BefUr8Ko7lscJoGKq5PRgNiwxbENwZa90 7vwQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=HgYtbANC; 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 a640c23a62f3a-a5cd5eec373si725523266b.672.2024.05.20.13.16.37; Mon, 20 May 2024 13:16: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=@gmail.com header.s=20230601 header.b=HgYtbANC; 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 5CA3E68D2A7; Mon, 20 May 2024 23:16:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9AD5768D212 for ; Mon, 20 May 2024 23:16:13 +0300 (EEST) Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-a5a5cb0e6b7so796581866b.1 for ; Mon, 20 May 2024 13:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716236172; x=1716840972; darn=ffmpeg.org; 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=rC+G1COcA2uRwnPHyU33C91MeQaOHt8+sD4bmcdl3Hs=; b=HgYtbANCPIMsz6EKSON4VzlQfLDEEr/jaAGpCGAAJAi+kZIfwpOarMX4Q+XZGGnZwN WUYQoPdrai6C92Fw4YpudJ8w66VCiSKEJxQoJJZndxCgDv5GTFB26m9KLHcVIpsjTukY ZIwJ3w2eDc7S34Bh393kaj6kp+N4L+bEB0293asB8POjhgJyTzBesTRLMydelSDXRZkQ hoo+5qgwEwK3S0GTk4JeKmjZrC3AX3Ykr4bGiokscYmmFzDeUG73g5kwSftxyMFtDd5s FMAEOSKgWvtd1ED0mZE+s8f/GreiREsZy5GOMdyfUK7QTvgOq28zCYfNieEogmJhEP2V sOqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716236172; x=1716840972; 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=rC+G1COcA2uRwnPHyU33C91MeQaOHt8+sD4bmcdl3Hs=; b=wQx4vDEL/JAYgGIYjfcwHdxW7WuM0WHye1m3I2ftX4gjlxDDA/gf6i3rPBoGvPsgVC iBImGHLX+OPMgV6a75H0OQI+sGYFYnFUgu+tBb5fLOaQSYFeQfVVPFhMvW7tTXOMfBVZ xmetB2d+JigYvpwqJ2U3TJX25XEuqMldTAoMauE7gU6h22B9XHhFnq/rDNdAVbumJ86Q p/ie/R0jzn+ZtN0TdxZGQBjigLEguxpkV986CZKmlFhwn7yfmB11gF5idAw715NiRhHY fERZ/w+5BWIbCZ3mi6lhgcH/obHG9qhyg381Epl1CYV6ZYcV9F6vTOoiWrz3QWrEwHgS bgww== X-Gm-Message-State: AOJu0Ywi5ha+jtTZhIyJVN32VnSm1P+pAo+86HLc4W/J2Vc46Ht5VkOA 2hA7p0gR+llniGG3DE1MV/HKVEYeS2/7kfb/0cRNEVYOnbGHeT6bLjwal6xK X-Received: by 2002:a17:906:194a:b0:a59:9b75:b90 with SMTP id a640c23a62f3a-a5a2d53ad53mr2025263366b.2.1716236172427; Mon, 20 May 2024 13:16:12 -0700 (PDT) Received: from localhost.localdomain ([2a02:e0:8bd6:600:b19e:f464:654a:2d9b]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a1787c6ffsm1498463466b.49.2024.05.20.13.16.11 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 20 May 2024 13:16:11 -0700 (PDT) From: Yigithan Yigit To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 May 2024 23:16:05 +0300 Message-ID: <20240520201606.90567-3-yigithanyigitdevel@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240520201606.90567-1-yigithanyigitdevel@gmail.com> References: <20240520201606.90567-1-yigithanyigitdevel@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/3] avfilter/af_volumedetect.c: Add 32bit float audio support 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: thilo.borgmann@mail.de, yigithanyigitdevel@gmail.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: aVuMhk7MdKW9 --- libavfilter/af_volumedetect.c | 159 ++++++++++++++++++++++++++++------ 1 file changed, 133 insertions(+), 26 deletions(-) diff --git a/libavfilter/af_volumedetect.c b/libavfilter/af_volumedetect.c index 327801a7f9..dbbcd037a5 100644 --- a/libavfilter/af_volumedetect.c +++ b/libavfilter/af_volumedetect.c @@ -20,27 +20,51 @@ #include "libavutil/channel_layout.h" #include "libavutil/avassert.h" +#include "libavutil/mem.h" #include "audio.h" #include "avfilter.h" #include "internal.h" +#define MAX_DB_FLT 1024 #define MAX_DB 91 +#define HISTOGRAM_SIZE 0x10000 +#define HISTOGRAM_SIZE_FLT (MAX_DB_FLT*2) typedef struct VolDetectContext { - /** - * Number of samples at each PCM value. - * histogram[0x8000 + i] is the number of samples at value i. - * The extra element is there for symmetry. - */ - uint64_t histogram[0x10001]; + uint64_t* histogram; ///< for integer number of samples at each PCM value, for float number of samples at each dB + uint64_t nb_samples; ///< number of samples + double sum2; ///< sum of the squares of the samples + double max; ///< maximum sample value + int is_float; ///< true if the input is in floating point } VolDetectContext; -static inline double logdb(uint64_t v) +static inline double logdb(double v, enum AVSampleFormat sample_fmt) { - double d = v / (double)(0x8000 * 0x8000); - if (!v) - return MAX_DB; - return -log10(d) * 10; + if (sample_fmt == AV_SAMPLE_FMT_FLT) { + if (!v) + return MAX_DB_FLT; + return -log10(v) * 10; + } else { + double d = v / (double)(0x8000 * 0x8000); + if (!v) + return MAX_DB; + return -log10(d) * 10; + } +} + +static void update_float_stats(VolDetectContext *vd, float *audio_data) +{ + double sample; + int idx; + if(!isnormal(*audio_data)) + return; + sample = fabsf(*audio_data); + if (sample > vd->max) + vd->max = sample; + vd->sum2 += sample * sample; + idx = lrintf(floorf(logdb(sample * sample, AV_SAMPLE_FMT_FLT))) + MAX_DB_FLT; + vd->histogram[idx]++; + vd->nb_samples++; } static int filter_frame(AVFilterLink *inlink, AVFrame *samples) @@ -51,18 +75,41 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *samples) int nb_channels = samples->ch_layout.nb_channels; int nb_planes = nb_channels; int plane, i; - int16_t *pcm; + int planar = 0; - if (!av_sample_fmt_is_planar(samples->format)) { - nb_samples *= nb_channels; + planar = av_sample_fmt_is_planar(samples->format); + if (!planar) nb_planes = 1; + if (vd->is_float) { + float *audio_data; + for (plane = 0; plane < nb_planes; plane++) { + audio_data = (float *)samples->extended_data[plane]; + for (i = 0; i < nb_samples; i++) { + if (planar) { + update_float_stats(vd, &audio_data[i]); + } else { + for (int j = 0; j < nb_channels; j++) + update_float_stats(vd, &audio_data[i * nb_channels + j]); + } + } + } + } else { + int16_t *pcm; + for (plane = 0; plane < nb_planes; plane++) { + pcm = (int16_t *)samples->extended_data[plane]; + for (i = 0; i < nb_samples; i++) { + if (planar) { + vd->histogram[pcm[i] + 0x8000]++; + vd->nb_samples++; + } else { + for (int j = 0; j < nb_channels; j++) { + vd->histogram[pcm[i * nb_channels + j] + 0x8000]++; + vd->nb_samples++; + } + } + } + } } - for (plane = 0; plane < nb_planes; plane++) { - pcm = (int16_t *)samples->extended_data[plane]; - for (i = 0; i < nb_samples; i++) - vd->histogram[pcm[i] + 0x8000]++; - } - return ff_filter_frame(inlink->dst->outputs[0], samples); } @@ -73,6 +120,20 @@ static void print_stats(AVFilterContext *ctx) uint64_t nb_samples = 0, power = 0, nb_samples_shift = 0, sum = 0; uint64_t histdb[MAX_DB + 1] = { 0 }; + if (!vd->nb_samples) + return; + if (vd->is_float) { + av_log(ctx, AV_LOG_INFO, "n_samples: %" PRId64 "\n", vd->nb_samples); + av_log(ctx, AV_LOG_INFO, "mean_volume: %.1f dB\n", -logdb(vd->sum2 / vd->nb_samples, AV_SAMPLE_FMT_FLT)); + av_log(ctx, AV_LOG_INFO, "max_volume: %.1f dB\n", -2.0*logdb(vd->max, AV_SAMPLE_FMT_FLT)); + for (i = 0; i < HISTOGRAM_SIZE_FLT && !vd->histogram[i]; i++); + for (; i >= 0 && sum < vd->nb_samples / 1000; i++) { + if (!vd->histogram[i]) + continue; + av_log(ctx, AV_LOG_INFO, "histogram_%ddb: %" PRId64 "\n", MAX_DB_FLT - i, vd->histogram[i]); + sum += vd->histogram[i]; + } + } else { for (i = 0; i < 0x10000; i++) nb_samples += vd->histogram[i]; av_log(ctx, AV_LOG_INFO, "n_samples: %"PRId64"\n", nb_samples); @@ -92,26 +153,61 @@ static void print_stats(AVFilterContext *ctx) return; power = (power + nb_samples_shift / 2) / nb_samples_shift; av_assert0(power <= 0x8000 * 0x8000); - av_log(ctx, AV_LOG_INFO, "mean_volume: %.1f dB\n", -logdb(power)); + av_log(ctx, AV_LOG_INFO, "mean_volume: %.1f dB\n", -logdb((double)power, AV_SAMPLE_FMT_S16)); max_volume = 0x8000; while (max_volume > 0 && !vd->histogram[0x8000 + max_volume] && !vd->histogram[0x8000 - max_volume]) max_volume--; - av_log(ctx, AV_LOG_INFO, "max_volume: %.1f dB\n", -logdb(max_volume * max_volume)); + av_log(ctx, AV_LOG_INFO, "max_volume: %.1f dB\n", -logdb((double)(max_volume * max_volume), AV_SAMPLE_FMT_S16)); for (i = 0; i < 0x10000; i++) - histdb[(int)logdb((i - 0x8000) * (i - 0x8000))] += vd->histogram[i]; + histdb[(int)logdb((double)(i - 0x8000) * (i - 0x8000), AV_SAMPLE_FMT_S16)] += vd->histogram[i]; for (i = 0; i <= MAX_DB && !histdb[i]; i++); for (; i <= MAX_DB && sum < nb_samples / 1000; i++) { - av_log(ctx, AV_LOG_INFO, "histogram_%ddb: %"PRId64"\n", i, histdb[i]); + av_log(ctx, AV_LOG_INFO, "histogram_%ddb: %"PRId64"\n", -i, histdb[i]); sum += histdb[i]; } + } +} + +static int config_output(AVFilterLink *outlink) +{ + AVFilterContext *ctx = outlink->src; + VolDetectContext *vd = ctx->priv; + size_t histogram_size; + + vd->is_float = outlink->format == AV_SAMPLE_FMT_FLT || + outlink->format == AV_SAMPLE_FMT_FLTP; + + if (!vd->is_float) { + /* + * Number of samples at each PCM value. + * Only used for integer formats. + * For 16 bit signed PCM there are 65536. + * histogram[0x8000 + i] is the number of samples at value i. + * The extra element is there for symmetry. + */ + histogram_size = HISTOGRAM_SIZE + 1; + } else { + /* + * The histogram is used to store the number of samples at each dB + * instead of the number of samples at each PCM value. + */ + histogram_size = HISTOGRAM_SIZE_FLT + 1; + } + vd->histogram = av_calloc(histogram_size, sizeof(uint64_t)); + if (!vd->histogram) + return AVERROR(ENOMEM); + return 0; } static av_cold void uninit(AVFilterContext *ctx) { + VolDetectContext *vd = ctx->priv; print_stats(ctx); + if (vd->histogram) + av_freep(&vd->histogram); } static const AVFilterPad volumedetect_inputs[] = { @@ -122,6 +218,14 @@ static const AVFilterPad volumedetect_inputs[] = { }, }; +static const AVFilterPad volumedetect_outputs[] = { + { + .name = "default", + .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_output, + }, +}; + const AVFilter ff_af_volumedetect = { .name = "volumedetect", .description = NULL_IF_CONFIG_SMALL("Detect audio volume."), @@ -129,6 +233,9 @@ const AVFilter ff_af_volumedetect = { .uninit = uninit, .flags = AVFILTER_FLAG_METADATA_ONLY, FILTER_INPUTS(volumedetect_inputs), - FILTER_OUTPUTS(ff_audio_default_filterpad), - FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P), + FILTER_OUTPUTS(volumedetect_outputs), + FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_FLT, + AV_SAMPLE_FMT_FLTP), }; From patchwork Mon May 20 20:16:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yigithan Yigit X-Patchwork-Id: 49069 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp4768429pzb; Mon, 20 May 2024 13:16:46 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXW+By1NC2bnnTPIuc71pOvYanvNwCUpiwU2s2amZdHyltvPF8JX9oEvLBT+vuLwVfQWSs+/j/kr98XFnVEkdiSwmnIjPXQaqar3A== X-Google-Smtp-Source: AGHT+IHJ4kLx94voe7rkoYuLwGPkVAHlwch+03lo/bMMYMzqhxxfXwr5bosdeP10KFYqzVZg5OYh X-Received: by 2002:a17:907:7292:b0:a61:a581:d5c with SMTP id a640c23a62f3a-a61a5810e00mr250424066b.6.1716236206357; Mon, 20 May 2024 13:16:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716236206; cv=none; d=google.com; s=arc-20160816; b=CG1WKhvHfDrD0rysKZzo23hbXZRVxmENm1ATUST/yx1V4SzF11ZNVWdPrs9ayc7t09 qdNJsC41FdLBkfFBPq2cvAxPboyGr+Tx07RzDnRmArH4TQPShemsxH1esMWFeprw+fBb sSMWM+vc4pJwdilGBxBTyGvzEq9BDHuVqJ78eUQwwlcijtmiPphGFfA+1MbiGevWixBw f7Z2lILtEhGuh/yN3ljTN4BathEUrfKDTcfky+m9+TfYScAF7vfPo8c8lifP3qZkt11D 06Hh4kPiGa4+k9Y0XBHMBKI+bfmayarfJO+ZxHlXiMGRPQKJGgEwqh+aUXbI99GHhqMf ARzw== 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=E1mwgwodgNiwoOwRMgw7eziY8yz+8+Xc/e3iLyY9Qwc=; fh=oYrUj4vT4ivb560z23e71q/pal11/Mm+yKMO8RKszaM=; b=zjnpvyTMH4q0ZNl/H2QqoAhuf/2MVcyzryeGa0mYNTtJRdkGe6/em3iaOJoBvNvtVm mhPmlKx3nzyUyxEpsnJ635B5zm1Mx9j1iB0Wm0V9J3gkyrnXBr6xtR/L4mBARdoHMGR9 s53GNI7c3g8p14ldNgGvfo6oeMD4gfQPPutV4rJ2WmqEZOO0fVtHcmhMUSULPsR7xS0H SwFmHILtteNdNDL7C4xnmawMXiMH0ucJoKngFrf/PBQRb+SdqjJGAZ+mHJ00ck/rRVgq io5/nm0P4um6MOgaxzLeJmaa2aU+yfUmLr3EgMYJFddknzSy1KQsva9Xd1og/dAmpKPU WM7A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=F7bLcZgg; 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 a640c23a62f3a-a5a17b217f2si1371379666b.298.2024.05.20.13.16.45; Mon, 20 May 2024 13:16:46 -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=20230601 header.b=F7bLcZgg; 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 8607968D261; Mon, 20 May 2024 23:16:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A11068D212 for ; Mon, 20 May 2024 23:16:15 +0300 (EEST) Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-574f7c0bab4so10011889a12.0 for ; Mon, 20 May 2024 13:16:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716236174; x=1716840974; darn=ffmpeg.org; 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=qT+/cR5XuIe0cgRWOaovGp9ucMUws0WRgUpxZc5Q2UM=; b=F7bLcZggvwiyKroygO+vrJ7jdM8X1EMZGsZVzD0VPfq1PopN/adLLCshamHKYt6yLX 7yLFzwcire1iBCXdWu9PTVeRFt2tv4tt4QT8ogFG3yi2rEbI9ZIOETSli/E+HBACr1pd qbOoaXGBW/nxnWdiXQuLINcgDlRkRRgupzBmMkSgpKp/R3VOpX0j54aRmwULeF+vlb8h 9Niao290JdvHr5Xu+OO63IMAY/rm3Gwwv6Oy6u21SJ0vMLciAE5gQDe5PXl0YPvz5nA4 MUBfC6hhQVCHuP1DGCYWsEWkYg0P7pKiuMcy3r/Q74GB/3qzCqaLPH4as57ei8IUe7n/ 5e2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716236174; x=1716840974; 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=qT+/cR5XuIe0cgRWOaovGp9ucMUws0WRgUpxZc5Q2UM=; b=ISOXQMVOWzdQ3mKzHyTkjcxLZUac+SScGOJK8d7oYmBnURnTui2mwBd9DBoaHjJAGF augnxvMmtu6zQzJSILu+gBtmow0KY7DaYPaVWLShL7vgHrBFAuRqed90L0slh33iGXeO 1MZ+yA6sYjZeGTsv5xdruEnvRNUFnIbINuJNdrnEcYKQ0Ezbd+7LqsB110nuc7aIYaxL +30ZGMLcIXnpGiMqkawONSLA6rg0Aa/LoDF00scUvUyht58ZO5GCrW3hqkLM/mMO29Uc 2N7n+jKo82PXfaNW8n/sqHFMFMepgR8bzIcCJo9BSacmoLeZrwPQ1ToJtWGXWaxnpX5D Y6OA== X-Gm-Message-State: AOJu0YwLvK34MVsZXQ58lf//ZI8TUvaRA+0jIdesTlTUIJjahPDpFbuA dvpFgFj2oWJm3dRklZPZd1z//LbZnYZzkbViFHqV68yJwx/2R771w0ISnO+B X-Received: by 2002:a17:906:a05a:b0:a59:a7ea:dd22 with SMTP id a640c23a62f3a-a5d5a376cb2mr613602766b.14.1716236174140; Mon, 20 May 2024 13:16:14 -0700 (PDT) Received: from localhost.localdomain ([2a02:e0:8bd6:600:b19e:f464:654a:2d9b]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a1787c6ffsm1498463466b.49.2024.05.20.13.16.12 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 20 May 2024 13:16:13 -0700 (PDT) From: Yigithan Yigit To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 May 2024 23:16:06 +0300 Message-ID: <20240520201606.90567-4-yigithanyigitdevel@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240520201606.90567-1-yigithanyigitdevel@gmail.com> References: <20240520201606.90567-1-yigithanyigitdevel@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 3/3] avfilter/af_volumedetect.c: reindent after last commit 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: thilo.borgmann@mail.de, yigithanyigitdevel@gmail.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6xEpuP879e1Y --- libavfilter/af_volumedetect.c | 68 +++++++++++++++++------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/libavfilter/af_volumedetect.c b/libavfilter/af_volumedetect.c index dbbcd037a5..b78b073c09 100644 --- a/libavfilter/af_volumedetect.c +++ b/libavfilter/af_volumedetect.c @@ -134,40 +134,40 @@ static void print_stats(AVFilterContext *ctx) sum += vd->histogram[i]; } } else { - for (i = 0; i < 0x10000; i++) - nb_samples += vd->histogram[i]; - av_log(ctx, AV_LOG_INFO, "n_samples: %"PRId64"\n", nb_samples); - if (!nb_samples) - return; - - /* If nb_samples > 1<<34, there is a risk of overflow in the - multiplication or the sum: shift all histogram values to avoid that. - The total number of samples must be recomputed to avoid rounding - errors. */ - shift = av_log2(nb_samples >> 33); - for (i = 0; i < 0x10000; i++) { - nb_samples_shift += vd->histogram[i] >> shift; - power += (i - 0x8000) * (i - 0x8000) * (vd->histogram[i] >> shift); - } - if (!nb_samples_shift) - return; - power = (power + nb_samples_shift / 2) / nb_samples_shift; - av_assert0(power <= 0x8000 * 0x8000); - av_log(ctx, AV_LOG_INFO, "mean_volume: %.1f dB\n", -logdb((double)power, AV_SAMPLE_FMT_S16)); - - max_volume = 0x8000; - while (max_volume > 0 && !vd->histogram[0x8000 + max_volume] && - !vd->histogram[0x8000 - max_volume]) - max_volume--; - av_log(ctx, AV_LOG_INFO, "max_volume: %.1f dB\n", -logdb((double)(max_volume * max_volume), AV_SAMPLE_FMT_S16)); - - for (i = 0; i < 0x10000; i++) - histdb[(int)logdb((double)(i - 0x8000) * (i - 0x8000), AV_SAMPLE_FMT_S16)] += vd->histogram[i]; - for (i = 0; i <= MAX_DB && !histdb[i]; i++); - for (; i <= MAX_DB && sum < nb_samples / 1000; i++) { - av_log(ctx, AV_LOG_INFO, "histogram_%ddb: %"PRId64"\n", -i, histdb[i]); - sum += histdb[i]; - } + for (i = 0; i < 0x10000; i++) + nb_samples += vd->histogram[i]; + av_log(ctx, AV_LOG_INFO, "n_samples: %"PRId64"\n", nb_samples); + if (!nb_samples) + return; + + /* If nb_samples > 1<<34, there is a risk of overflow in the + multiplication or the sum: shift all histogram values to avoid that. + The total number of samples must be recomputed to avoid rounding + errors. */ + shift = av_log2(nb_samples >> 33); + for (i = 0; i < 0x10000; i++) { + nb_samples_shift += vd->histogram[i] >> shift; + power += (i - 0x8000) * (i - 0x8000) * (vd->histogram[i] >> shift); + } + if (!nb_samples_shift) + return; + power = (power + nb_samples_shift / 2) / nb_samples_shift; + av_assert0(power <= 0x8000 * 0x8000); + av_log(ctx, AV_LOG_INFO, "mean_volume: %.1f dB\n", -logdb((double)power, AV_SAMPLE_FMT_S16)); + + max_volume = 0x8000; + while (max_volume > 0 && !vd->histogram[0x8000 + max_volume] && + !vd->histogram[0x8000 - max_volume]) + max_volume--; + av_log(ctx, AV_LOG_INFO, "max_volume: %.1f dB\n", -logdb((double)(max_volume * max_volume), AV_SAMPLE_FMT_S16)); + + for (i = 0; i < 0x10000; i++) + histdb[(int)logdb((double)(i - 0x8000) * (i - 0x8000), AV_SAMPLE_FMT_S16)] += vd->histogram[i]; + for (i = 0; i <= MAX_DB && !histdb[i]; i++); + for (; i <= MAX_DB && sum < nb_samples / 1000; i++) { + av_log(ctx, AV_LOG_INFO, "histogram_%ddb: %"PRId64"\n", -i, histdb[i]); + sum += histdb[i]; + } } }