MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / put_codebook_header

Function put_codebook_header

libavcodec/vorbisenc.c:495–558  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

493}
494
495static void put_codebook_header(PutBitContext *pb, vorbis_enc_codebook *cb)
496{
497 int i;
498 int ordered = 0;
499
500 put_bits(pb, 24, 0x564342); //magic
501 put_bits(pb, 16, cb->ndimensions);
502 put_bits(pb, 24, cb->nentries);
503
504 for (i = 1; i < cb->nentries; i++)
505 if (cb->lens[i] < cb->lens[i-1])
506 break;
507 if (i == cb->nentries)
508 ordered = 1;
509
510 put_bits(pb, 1, ordered);
511 if (ordered) {
512 int len = cb->lens[0];
513 put_bits(pb, 5, len - 1);
514 i = 0;
515 while (i < cb->nentries) {
516 int j;
517 for (j = 0; j+i < cb->nentries; j++)
518 if (cb->lens[j+i] != len)
519 break;
520 put_bits(pb, ilog(cb->nentries - i), j);
521 i += j;
522 len++;
523 }
524 } else {
525 int sparse = 0;
526 for (i = 0; i < cb->nentries; i++)
527 if (!cb->lens[i])
528 break;
529 if (i != cb->nentries)
530 sparse = 1;
531 put_bits(pb, 1, sparse);
532
533 for (i = 0; i < cb->nentries; i++) {
534 if (sparse)
535 put_bits(pb, 1, !!cb->lens[i]);
536 if (cb->lens[i])
537 put_bits(pb, 5, cb->lens[i] - 1);
538 }
539 }
540
541 put_bits(pb, 4, cb->lookup);
542 if (cb->lookup) {
543 int tmp = cb_lookup_vals(cb->lookup, cb->ndimensions, cb->nentries);
544 int bits = ilog(cb->quantlist[0]);
545
546 for (i = 1; i < tmp; i++)
547 bits = FFMAX(bits, ilog(cb->quantlist[i]));
548
549 put_float(pb, cb->min);
550 put_float(pb, cb->delta);
551
552 put_bits(pb, 4, bits - 1);

Callers 1

put_main_headerFunction · 0.85

Calls 3

cb_lookup_valsFunction · 0.85
put_floatFunction · 0.85
put_bitsFunction · 0.70

Tested by

no test coverage detected