From d2d5c89d344a35a4f27fab8c7e8c039bfcb9b4e2 Mon Sep 17 00:00:00 2001 From: Oded Shimon Date: Mon, 2 Oct 2006 05:55:24 +0000 Subject: [PATCH] Original Commit: r8 | ods15 | 2006-09-17 09:43:38 +0300 (Sun, 17 Sep 2006) | 2 lines floor header syntax Originally committed as revision 6419 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/vorbis_enc.c | 44 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c index 3a9d5860f4..6d82a44671 100644 --- a/libavcodec/vorbis_enc.c +++ b/libavcodec/vorbis_enc.c @@ -52,6 +52,21 @@ typedef struct { } codebook_t; typedef struct { + int dim; + int subclass; + int masterbook; + int * books; +} floor_class_t; + +typedef struct { + int partitions; + int * partition_to_class; + int nclasses; + floor_class_t * classes; + int multiplier; + int rangebits; + int values; + struct { int x; } * list; } floor_t; typedef struct { @@ -154,10 +169,35 @@ static void put_codebook_header(PutBitContext * pb, codebook_t * cb) { } } -static void put_floor_header(PutBitContext * pb, floor_t * fl) { +static void put_floor_header(PutBitContext * pb, floor_t * fc) { + int i; + + put_bits(pb, 16, 1); // type, only floor1 is supported + + put_bits(pb, 5, fc->partitions); + + for (i = 0; i < fc->partitions; i++) put_bits(pb, 4, fc->partition_to_class[i]); + + for (i = 0; i < fc->nclasses; i++) { + int j, books; + + put_bits(pb, 3, fc->classes[i].dim - 1); + put_bits(pb, 2, fc->classes[i].subclass); + + if (fc->classes[i].subclass) put_bits(pb, 8, fc->classes[i].masterbook); + + books = (1 << fc->classes[i].subclass); + + for (j = 0; j < books; j++) put_bits(pb, 8, fc->classes[i].books[j] + 1); + } + + put_bits(pb, 2, fc->multiplier - 1); + put_bits(pb, 4, fc->rangebits); + + for (i = 2; i < fc->values; i++) put_bits(pb, fc->rangebits, fc->list[i].x); } -static void put_residue_header(PutBitContext * pb, residue_t * r) { +static void put_residue_header(PutBitContext * pb, residue_t * rc) { } static int put_main_header(venc_context_t * venc, uint8_t ** out) {