ref: fcd513e780dc5b95bc7d7e4d68e33025bc8e58a4
parent: 8bead7488ea4b18749f385141b68febc0726ce2b
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Mon Sep 16 10:50:09 EDT 2024
Fix anti-collapse RESYNTH mismatch for mono Seems to have been in 682b6cf1. There's nothing wrong with either the encoder or the decoder. Just about how we resynthesize anti-collapse for mono in the encoder.
--- a/celt/bands.c
+++ b/celt/bands.c
@@ -267,7 +267,7 @@
/* This prevents energy collapse for transients with multiple short MDCTs */
void anti_collapse(const CELTMode *m, celt_norm *X_, unsigned char *collapse_masks, int LM, int C, int size,
int start, int end, const opus_val16 *logE, const opus_val16 *prev1logE,
- const opus_val16 *prev2logE, const int *pulses, opus_uint32 seed, int arch)
+ const opus_val16 *prev2logE, const int *pulses, opus_uint32 seed, int encode, int arch)
{
int c, i, j, k;
for (i=start;i<end;i++)
@@ -310,7 +310,7 @@
int renormalize=0;
prev1 = prev1logE[c*m->nbEBands+i];
prev2 = prev2logE[c*m->nbEBands+i];
- if (C==1)
+ if (!encode && C==1)
{
prev1 = MAX16(prev1,prev1logE[m->nbEBands+i]);
prev2 = MAX16(prev2,prev2logE[m->nbEBands+i]);
--- a/celt/bands.h
+++ b/celt/bands.h
@@ -114,7 +114,7 @@
unsigned char *collapse_masks, int LM, int C, int size, int start,
int end, const opus_val16 *logE, const opus_val16 *prev1logE,
const opus_val16 *prev2logE, const int *pulses, opus_uint32 seed,
- int arch);
+ int encode, int arch);
opus_uint32 celt_lcg_rand(opus_uint32 seed);
--- a/celt/celt_decoder.c
+++ b/celt/celt_decoder.c
@@ -1286,7 +1286,7 @@
if (anti_collapse_on)
anti_collapse(mode, X, collapse_masks, LM, C, N,
- start, end, oldBandE, oldLogE, oldLogE2, pulses, st->rng, st->arch);
+ start, end, oldBandE, oldLogE, oldLogE2, pulses, st->rng, 0, st->arch);
if (silence)
{
--- a/celt/celt_encoder.c
+++ b/celt/celt_encoder.c
@@ -2272,7 +2272,7 @@
if (anti_collapse_on)
{
anti_collapse(mode, X, collapse_masks, LM, C, N,
- start, end, oldBandE, oldLogE, oldLogE2, pulses, st->rng, st->arch);
+ start, end, oldBandE, oldLogE, oldLogE2, pulses, st->rng, 1, st->arch);
}
c=0; do {
--
⑨