From: Agent45 via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> To: ffmpeg-devel@ffmpeg.org Cc: Agent45 <code@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH] avcodec/aacenc: add high energy check to exclude unsuitable bands from PNS (PR #20521) Date: Sun, 14 Sep 2025 21:12:51 -0000 Message-ID: <175788437184.25.1881772988305524450@463a07221176> (raw) PR #20521 opened by Agent45 URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20521 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20521.patch Add a maximum energy check in mark_pns() , adapted from search_for_pns(). Extremely high-energy bands should be excluded early from PNS to prevent harsh artifacts. This resolves issue #20200. >From b116bf897cb68a076f19304e728d957835d32b2a Mon Sep 17 00:00:00 2001 From: Agent45 <agent45@noreply.code.ffmpeg.org> Date: Sun, 14 Sep 2025 21:03:37 +0000 Subject: [PATCH] avcodec/aacenc: add high energy check to exclude unsuitable bands from PNS Add a maximum energy check in mark_pns() , adapted from search_for_pns(). Extremely high-energy bands should be excluded early from PNS to prevent harsh artifacts. This resolves issue #20200. --- libavcodec/aaccoder.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavcodec/aaccoder.c b/libavcodec/aaccoder.c index 7f1c4cdcc1..346338331d 100644 --- a/libavcodec/aaccoder.c +++ b/libavcodec/aaccoder.c @@ -636,6 +636,7 @@ static void mark_pns(AACEncContext *s, AVCodecContext *avctx, SingleChannelEleme int bandwidth, cutoff; const float lambda = s->lambda; const float freq_mult = avctx->sample_rate*0.5f/wlen; + const float thr_mult = NOISE_LAMBDA_REPLACE*(100.0f/lambda); const float spread_threshold = FFMIN(0.75f, NOISE_SPREAD_THRESHOLD*FFMAX(0.5f, lambda/100.f)); const float pns_transient_energy_r = FFMIN(0.7f, lambda / 140.f); @@ -690,7 +691,10 @@ static void mark_pns(AACEncContext *s, AVCodecContext *avctx, SingleChannelEleme * 3. on short window groups, all windows have similar energy (variations in energy would be destroyed by PNS) */ sce->pns_ener[w*16+g] = sfb_energy; - if (sfb_energy < threshold*sqrtf(1.5f/freq_boost) || spread < spread_threshold || min_energy < pns_transient_energy_r * max_energy) { + if (sfb_energy < threshold*sqrtf(1.5f/freq_boost) || + sfb_energy > 100.0f * threshold*thr_mult*freq_boost || + spread < spread_threshold || + min_energy < pns_transient_energy_r * max_energy) { sce->can_pns[w*16+g] = 0; } else { sce->can_pns[w*16+g] = 1; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org
reply other threads:[~2025-09-14 21:13 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=175788437184.25.1881772988305524450@463a07221176 \ --to=ffmpeg-devel@ffmpeg.org \ --cc=code@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git