From fe0b8e8db420303dc891cfe8d23eac73a5bc7846 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <Jean-Marc.Valin@csiro.au> Date: Fri, 23 May 2008 13:35:35 +1000 Subject: [PATCH] infrastructure changes for upcoming stereo improvements --- libcelt/bands.c | 11 ++++++++++- libcelt/bands.h | 2 ++ libcelt/modes.c | 2 +- libcelt/rate.c | 10 +++++----- libcelt/rate.h | 2 +- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/libcelt/bands.c b/libcelt/bands.c index a3ce002cd..1429ea29e 100644 --- a/libcelt/bands.c +++ b/libcelt/bands.c @@ -289,7 +289,6 @@ void pitch_quant_bands(const CELTMode *m, celt_norm_t * restrict P, const celt_p P[i] = 0; } - /* Quantisation of the residual */ void quant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, celt_mask_t *W, int total_bits, ec_enc *enc) { @@ -409,6 +408,16 @@ void unquant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, } #ifndef DISABLE_STEREO +void stereo_decision(const CELTMode *m, celt_norm_t * restrict X, int *stereo_mode, int len) +{ + int i; + for (i=0;i<len-5;i++) + stereo_mode[i] = 0; + for (;i<len;i++) + stereo_mode[i] = 1; +} + + void stereo_mix(const CELTMode *m, celt_norm_t *X, const celt_ener_t *bank, int dir) { int i; diff --git a/libcelt/bands.h b/libcelt/bands.h index 3ad63f66d..df7251d71 100644 --- a/libcelt/bands.h +++ b/libcelt/bands.h @@ -97,6 +97,8 @@ void quant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, ce */ void unquant_bands(const CELTMode *m, celt_norm_t * restrict X, celt_norm_t *P, int total_bits, ec_dec *dec); +void stereo_decision(const CELTMode *m, celt_norm_t * restrict X, int *stereo_mode, int len); + void stereo_mix(const CELTMode *m, celt_norm_t *X, const celt_ener_t *bank, int dir); #endif /* BANDS_H */ diff --git a/libcelt/modes.c b/libcelt/modes.c index 08349f4a1..89ba428f8 100644 --- a/libcelt/modes.c +++ b/libcelt/modes.c @@ -364,7 +364,7 @@ CELTMode EXPORT *celt_mode_create(celt_int32_t Fs, int channels, int frame_size, #endif mode->window = window; - compute_alloc_cache(mode); + mode->bits = (const celt_int16_t **)compute_alloc_cache(mode, mode->nbChannels); #ifndef SHORTCUTS psydecay_init(&mode->psy, MAX_PERIOD/2, mode->Fs); diff --git a/libcelt/rate.c b/libcelt/rate.c index efc2941f4..66b21a20d 100644 --- a/libcelt/rate.c +++ b/libcelt/rate.c @@ -97,19 +97,19 @@ static int log2_frac64(ec_uint64 val, int frac) return L; } -void compute_alloc_cache(CELTMode *m) +celt_int16_t **compute_alloc_cache(CELTMode *m, int C) { - int i, prevN, BC; + int i, prevN; celt_int16_t **bits; const celt_int16_t *eBands = m->eBands; bits = celt_alloc(m->nbEBands*sizeof(celt_int16_t*)); - BC = m->nbChannels; + C = m->nbChannels; prevN = -1; for (i=0;i<m->nbEBands;i++) { - int N = BC*(eBands[i+1]-eBands[i]); + int N = C*(eBands[i+1]-eBands[i]); if (N == prevN && eBands[i] < m->pitchEnd) { bits[i] = bits[i-1]; @@ -150,7 +150,7 @@ void compute_alloc_cache(CELTMode *m) RESTORE_STACK; } } - m->bits = (const celt_int16_t * const *)bits; + return bits; } #endif /* !STATIC_MODES */ diff --git a/libcelt/rate.h b/libcelt/rate.h index 0d6936845..b0cd4cb1a 100644 --- a/libcelt/rate.h +++ b/libcelt/rate.h @@ -36,7 +36,7 @@ #define LOG_MAX_PULSES 6 /** Computes a cache of the pulses->bits mapping in each band */ -void compute_alloc_cache(CELTMode *m); +celt_int16_t **compute_alloc_cache(CELTMode *m, int C); /** Compute the pulse allocation, i.e. how many pulses will go in each * band. -- GitLab