ref: 29ccab8aacdd3a0bb3d8c5b74fc54ece925384fd
parent: bc5cedf26ff213b6d35ca892f79c20ecf100c825
author: Jean-Marc Valin <[email protected]>
date: Thu Dec 6 10:39:38 EST 2007
Some work on index packing
--- a/libcelt/bands.c
+++ b/libcelt/bands.c
@@ -146,7 +146,7 @@
P[i] = 0;
}
-void quant_bands(const CELTMode *m, float *X, float *P)
+void quant_bands(const CELTMode *m, float *X, float *P, ec_enc *enc)
{
int i, j, B;
const int *eBands = m->eBands;
@@ -156,11 +156,12 @@
for (i=0;i<m->nbEBands;i++)
{
- int q;
+ int q, id;
q = m->nbPulses[i];
if (q>0) {
float n = sqrt(B*(eBands[i+1]-eBands[i]));
- alg_quant2(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, P+B*eBands[i]);
+ id = alg_quant2(X+B*eBands[i], B*(eBands[i+1]-eBands[i]), q, P+B*eBands[i]);
+ ec_enc_uint(enc,id,ncwrs(B*(eBands[i+1]-eBands[i]), q));
for (j=B*eBands[i];j<B*eBands[i+1];j++)
norm[j] = X[j] * n;
//bits += log2(ncwrs(B*(eBands[i+1]-eBands[i]), q));
--- a/libcelt/bands.h
+++ b/libcelt/bands.h
@@ -32,7 +32,9 @@
#ifndef BANDS_H
#define BANDS_H
+
#include "modes.h"
+#include "entenc.h"
void compute_band_energies(const CELTMode *m, float *X, float *bands);
@@ -44,7 +46,7 @@
void pitch_quant_bands(const CELTMode *m, float *X, float *P, float *gains);
-void quant_bands(const CELTMode *m, float *X, float *P);
+void quant_bands(const CELTMode *m, float *X, float *P, ec_enc *enc);
void pitch_renormalise_bands(const CELTMode *m, float *X, float *P);
--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -235,7 +235,7 @@
sum += X[i]*X[i];
printf ("%f\n", sum);*/
/* Residual quantisation */
- quant_bands(st->mode, X, P);
+ quant_bands(st->mode, X, P, &st->enc);
/* Synthesis */
denormalise_bands(st->mode, X, bandE);
@@ -267,7 +267,7 @@
pcm[i*N+j] = (short)floor(.5+tmp);
}
}
-
+ printf ("%d\n", ec_byte_bytes(&st->buf));
return 0;
}
--- a/libcelt/vq.c
+++ b/libcelt/vq.c
@@ -31,6 +31,7 @@
#include <math.h>
#include <stdlib.h>
+#include "cwrs.h"
/* Algebraic pulse-base quantiser. The signal x is replaced by the sum of the pitch
a combination of pulses such that its norm is still equal to 1 */
@@ -94,7 +95,7 @@
/* Improved algebraic pulse-base quantiser. The signal x is replaced by the sum of the pitch
a combination of pulses such that its norm is still equal to 1. The only difference with
the quantiser above is that the search is more complete. */
-void alg_quant2(float *x, int N, int K, float *p)
+int alg_quant2(float *x, int N, int K, float *p)
{
int L = 5;
//float tata[200];
@@ -236,6 +237,10 @@
for (i=0;i<N;i++)
x[i] *= E;
}
+ int comb[K];
+ int signs[K];
+ pulse2comb(N, K, comb, signs, iy[0]);
+ return icwrs(N, K, comb, signs);
}
/* Just replace the band with noise of unit energy */
--- a/libcelt/vq.h
+++ b/libcelt/vq.h
@@ -39,7 +39,7 @@
/* Improved algebraic pulse-base quantiser. The signal x is replaced by the sum of the pitch
a combination of pulses such that its norm is still equal to 1. The only difference with
the quantiser above is that the search is more complete. */
-void alg_quant2(float *x, int N, int K, float *p);
+int alg_quant2(float *x, int N, int K, float *p);
/* Just replace the band with noise of unit energy */
void noise_quant(float *x, int N, int K, float *p);