Mercurial > libavcodec.hg
comparison vorbis_enc.c @ 3839:c5ec6d7710ba libavcodec
Original Commit: r36 | ods15 | 2006-09-23 08:43:09 +0300 (Sat, 23 Sep 2006) | 2 lines
starting point for packet encode, writing floor
author | ods15 |
---|---|
date | Mon, 02 Oct 2006 05:56:18 +0000 |
parents | 6ccaab22c4d6 |
children | bb414feb6a0d |
comparison
equal
deleted
inserted
replaced
3838:6ccaab22c4d6 | 3839:c5ec6d7710ba |
---|---|
587 } | 587 } |
588 | 588 |
589 | 589 |
590 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) | 590 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) |
591 { | 591 { |
592 #if 0 | |
593 venc_context_t * venc = avccontext->priv_data; | 592 venc_context_t * venc = avccontext->priv_data; |
594 signed short * audio = data; | 593 signed short * audio = data; |
595 int samples = data ? avccontext->frame_size : 0; | 594 int samples = data ? avccontext->frame_size : 0; |
596 | 595 vorbis_mode_t * mode; |
597 avccontext->coded_frame->pts = av_rescale_q(op2->granulepos, (AVRational){1, avccontext->sample_rate}, avccontext->time_base); | 596 mapping_t * mapping; |
598 memcpy(packets, compressed_frame, l); | 597 PutBitContext pb; |
599 #endif | 598 int i; |
599 | |
600 init_put_bits(&pb, packets, buf_size); | |
601 | |
602 put_bits(&pb, 1, 0); // magic bit | |
603 | |
604 put_bits(&pb, ilog(venc->nmodes - 1), 0); // 0 bits, the mode | |
605 | |
606 mode = &venc->modes[0]; | |
607 mapping = &venc->mappings[mode->mapping]; | |
608 if (mode->blockflag) { | |
609 put_bits(&pb, 1, 0); | |
610 put_bits(&pb, 1, 0); | |
611 } | |
612 | |
613 for (i = 0; i < venc->channels; i++) { | |
614 floor_t * fc = &venc->floors[mapping->floor[mapping->mux[i]]]; | |
615 int range = 255 / fc->multiplier + 1; | |
616 int j; | |
617 put_bits(&pb, 1, 1); // non zero | |
618 put_bits(&pb, ilog(range - 1), 113); // magic value - 3.7180282E-05 | |
619 put_bits(&pb, ilog(range - 1), 113); // both sides of X | |
620 for (j = 0; j < fc->partitions; j++) { | |
621 floor_class_t * c = &fc->classes[fc->partition_to_class[j]]; | |
622 codebook_t * book = &venc->codebooks[c->books[0]]; | |
623 int entry = 0; | |
624 int k; | |
625 for (k = 0; k < c->dim; k++) { | |
626 put_bits(&pb, book->entries[entry].len, book->entries[entry].codeword); | |
627 } | |
628 } | |
629 } | |
630 | |
600 return data ? 50 : 0; | 631 return data ? 50 : 0; |
601 } | 632 } |
602 | 633 |
603 | 634 |
604 static int vorbis_encode_close(AVCodecContext * avccontext) | 635 static int vorbis_encode_close(AVCodecContext * avccontext) |