Original Commit: r23 | ods15 | 2006-09-22 13:55:48 +0300 (Fri, 22 Sep 2006) | 2 lines
[ffmpeg.git] / libavcodec / vorbis_enc.c
index 1616099..19aa4fb 100644 (file)
@@ -164,6 +164,9 @@ static void ready_codebook(codebook_t * cb) {
 
 static void create_vorbis_context(venc_context_t * venc, AVCodecContext * avccontext) {
     codebook_t * cb;
+    floor_t * fc;
+    residue_t * rc;
+    mapping_t * mc;
     int i, book;
 
     venc->channels = avccontext->channels;
@@ -215,6 +218,69 @@ static void create_vorbis_context(venc_context_t * venc, AVCodecContext * avccon
         ready_codebook(cb);
     }
 
+    venc->nfloors = 1;
+    venc->floors = av_malloc(sizeof(floor_t) * venc->nfloors);
+
+    // just 1 floor
+    fc = &venc->floors[0];
+    fc->partitions = 1;
+    fc->partition_to_class = av_malloc(sizeof(int) * fc->partitions);
+    for (i = 0; i < fc->partitions; i++) fc->partition_to_class = 0;
+    fc->nclasses = 1;
+    fc->classes = av_malloc(sizeof(floor_class_t) * fc->nclasses);
+    for (i = 0; i < fc->nclasses; i++) {
+        floor_class_t * c = &fc->classes[i];
+        int j, books;
+        c->dim = 1;
+        c->subclass = 0;
+        c->masterbook = 0;
+        books = (1 << c->subclass);
+        c->books = av_malloc(sizeof(int) * books);
+        for (j = 0; j < books; j++) c->books[j] = 0;
+    }
+    fc->multiplier = 1;
+    fc->rangebits = venc->blocksize[0];
+
+    fc->values = 2;
+    for (i = 0; i < fc->partitions; i++)
+        fc->values += fc->classes[fc->partition_to_class[i]].dim;
+
+    fc->list = av_malloc(sizeof(*fc->list) * fc->values);
+    fc->list[0].x = 0;
+    fc->list[1].x = 1 << fc->rangebits;
+    for (i = 2; i < fc->values; i++) fc->list[i].x = i * 5;
+
+    venc->nresidues = 1;
+    venc->residues = av_malloc(sizeof(residue_t) * venc->nresidues);
+
+    // single residue
+    rc = &venc->residues[0];
+    rc->type = 0;
+    rc->begin = 0;
+    rc->end = 1 << venc->blocksize[0];
+    rc->partition_size = 64;
+    rc->classifications = 1;
+    rc->classbook = 1;
+    rc->books = av_malloc(sizeof(int[8]) * rc->classifications);
+    for (i = 0; i < 8; i++) rc->books[0][i] = 2 + i;
+
+    venc->nmappings = 1;
+    venc->mappings = av_malloc(sizeof(mapping_t) * venc->nmappings);
+
+    // single mapping
+    mc = &venc->mappings[0];
+    mc->submaps = 1;
+    mc->mux = av_malloc(sizeof(int) * venc->channels);
+    for (i = 0; i < venc->channels; i++) mc->mux[i] = 0;
+    mc->floor = av_malloc(sizeof(int) * mc->submaps);
+    mc->residue = av_malloc(sizeof(int) * mc->submaps);
+    for (i = 0; i < mc->submaps; i++) {
+        mc->floor[i] = 0;
+        mc->residue[i] = 0;
+    }
+
+    venc->nmodes = 1;
+    venc->modes = av_malloc(sizeof(vorbis_mode_t) * venc->nmodes);
 }
 
 static inline int ilog(unsigned int a) {
@@ -483,7 +549,7 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
     avccontext->coded_frame->pts = av_rescale_q(op2->granulepos, (AVRational){1, avccontext->sample_rate}, avccontext->time_base);
     memcpy(packets, compressed_frame, l);
 #endif
-    return 0;
+    return data ? 50 : 0;
 }