From bb5231b7563ca903f76fd5b94477bedc0acc4b68 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Mon, 1 Aug 2016 17:24:45 -0400 Subject: experimental new stereo VBR code --- celt/bands.c | 2 ++ celt/celt_encoder.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/celt/bands.c b/celt/bands.c index 9400b2cb..1185b4a8 100644 --- a/celt/bands.c +++ b/celt/bands.c @@ -1408,6 +1408,7 @@ static unsigned quant_band_stereo(struct band_ctx *ctx, celt_norm *X, celt_norm return cm; } +int band_bits[25]; void quant_all_bands(int encode, const CELTMode *m, int start, int end, celt_norm *X_, celt_norm *Y_, unsigned char *collapse_masks, @@ -1519,6 +1520,7 @@ void quant_all_bands(int encode, const CELTMode *m, int start, int end, } else { b = 0; } + band_bits[i] = b; if (resynth && M*eBands[i]-N >= M*eBands[start] && (update_lowband || lowband_offset==0)) lowband_offset = i; diff --git a/celt/celt_encoder.c b/celt/celt_encoder.c index 1a031d9e..fb6e649a 100644 --- a/celt/celt_encoder.c +++ b/celt/celt_encoder.c @@ -751,6 +751,40 @@ static void tf_encode(int start, int end, int isTransient, int *tf_res, int LM, /*for(i=0;i %f %f %f\n", dist, sin_phi, R); + return MAX16(0, -(2*N-1)*log(R)/log(4)); +} + +static float delta_bits(float bits, int N, float sin_phi, float sin_phi_ref) +{ + float dist = dist_from_bits(bits, N, sin_phi_ref); + return bits_from_dist(dist, N, sin_phi)-bits; +} +extern int band_bits[25]; +float stereo_delta; static int alloc_trim_analysis(const CELTMode *m, const celt_norm *X, const opus_val16 *bandLogE, int end, int LM, int C, int N0, @@ -768,6 +802,27 @@ static int alloc_trim_analysis(const CELTMode *m, const celt_norm *X, opus_val16 sum = 0; /* Q10 */ opus_val16 minXC; /* Q10 */ /* Compute inter-channel correlation for low frequencies */ + stereo_delta = 0; + for (i=0;ieBands[i]<eBands[i]<eBands[i+1]-m->eBands[i])<eBands[i+1]-m->eBands[i])<