comparison vorbis_enc.c @ 3874:84890fea8074 libavcodec

Original Commit: r74 | ods15 | 2006-09-29 13:03:31 +0300 (Fri, 29 Sep 2006) | 2 lines support multiple codebooks for floor
author ods15
date Mon, 02 Oct 2006 06:08:19 +0000
parents 41bddab6a00b
children ad075294470d
comparison
equal deleted inserted replaced
3873:41bddab6a00b 3874:84890fea8074
751 } 751 }
752 752
753 counter = 2; 753 counter = 2;
754 for (i = 0; i < fc->partitions; i++) { 754 for (i = 0; i < fc->partitions; i++) {
755 floor_class_t * c = &fc->classes[fc->partition_to_class[i]]; 755 floor_class_t * c = &fc->classes[fc->partition_to_class[i]];
756 codebook_t * book = &venc->codebooks[c->books[0]]; 756 int k, cval = 0, csub = 1<<c->subclass;
757 int k; 757 if (c->subclass) {
758 assert(!c->subclass); 758 codebook_t * book = &venc->codebooks[c->masterbook];
759 int cshift = 0;
760 for (k = 0; k < c->dim; k++) {
761 int l;
762 for (l = 0; l < csub; l++) {
763 int maxval = 1;
764 if (c->books[l] != -1) maxval = venc->codebooks[c->books[l]].nentries;
765 // coded could be -1, but this still works, cause thats 0
766 if (coded[counter + k] < maxval) break;
767 }
768 assert(l != csub);
769 cval |= l << cshift;
770 cshift += c->subclass;
771 }
772 assert(cval < book->nentries);
773 put_bits(pb, book->entries[cval].len, book->entries[cval].codeword);
774 }
759 for (k = 0; k < c->dim; k++) { 775 for (k = 0; k < c->dim; k++) {
776 codebook_t * book = &venc->codebooks[c->books[cval & (csub-1)]];
760 int entry = coded[counter++]; 777 int entry = coded[counter++];
778 cval >>= c->subclass;
761 if (entry == -1) entry = 0; 779 if (entry == -1) entry = 0;
762 assert(entry < book->nentries); 780 assert(entry < book->nentries);
763 assert(entry >= 0); 781 assert(entry >= 0);
764 put_bits(pb, book->entries[entry].len, book->entries[entry].codeword); 782 put_bits(pb, book->entries[entry].len, book->entries[entry].codeword);
765 } 783 }