From 8a202cb3a73cbc816a414974e21c5ac7ce0bb3e6 Mon Sep 17 00:00:00 2001 From: Oded Shimon Date: Mon, 2 Oct 2006 06:07:42 +0000 Subject: Original Commit: r58 | ods15 | 2006-09-24 17:35:28 +0300 (Sun, 24 Sep 2006) | 2 lines add ability to use codebook dimentions in residue Originally committed as revision 6463 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/vorbis_enc.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c index adbebc08c3..ca0d59594a 100644 --- a/libavcodec/vorbis_enc.c +++ b/libavcodec/vorbis_enc.c @@ -667,21 +667,25 @@ static int window(venc_context_t * venc, signed short * audio, int samples) { return 1; } -static float put_vector(codebook_t * book, PutBitContext * pb, float num) { +static float * put_vector(codebook_t * book, PutBitContext * pb, float * num) { int i; int entry = -1; float distance = 0; assert(book->dimentions); - assert(book->ndimentions == 1); for (i = 0; i < book->nentries; i++) { - float d = (book->dimentions[i] - num)*(book->dimentions[i] - num); + float d = 0.; + int j; + for (j = 0; j < book->ndimentions; j++) { + float a = (book->dimentions[i * book->ndimentions + j] - num[j]); + d += a*a; + } if (entry == -1 || distance > d) { entry = i; distance = d; } } put_bits(pb, book->entries[entry].len, book->entries[entry].codeword); - return book->dimentions[entry]; + return &book->dimentions[entry * book->ndimentions]; } static void residue_encode(venc_context_t * venc, residue_t * rc, PutBitContext * pb, float * coeffs, int samples, int channels) { @@ -711,10 +715,12 @@ static void residue_encode(venc_context_t * venc, residue_t * rc, PutBitContext if (nbook == -1) continue; assert(rc->type == 0); - assert(book->ndimentions == 1); + assert(!(psize % book->ndimentions)); - for (k = 0; k < psize; k++) { - buf[k] -= put_vector(book, pb, buf[k]); + for (k = 0; k < psize; k += book->ndimentions) { + float * a = put_vector(book, pb, &buf[k]); + int l; + for (l = 0; l < book->ndimentions; l++) buf[k + l] -= a[l]; } } } -- cgit v1.2.3