Mercurial > libavcodec.hg
comparison vorbis_enc.c @ 3859:0d0bd4b2baef libavcodec
Original Commit: r59 | ods15 | 2006-09-24 17:40:40 +0300 (Sun, 24 Sep 2006) | 2 lines
cosmetic, reorganize
author | ods15 |
---|---|
date | Mon, 02 Oct 2006 06:07:44 +0000 |
parents | 70b4bc721531 |
children | be0344cea4ea |
comparison
equal
deleted
inserted
replaced
3858:70b4bc721531 | 3859:0d0bd4b2baef |
---|---|
594 p += hlens[i]; | 594 p += hlens[i]; |
595 buffer_len += hlens[i]; | 595 buffer_len += hlens[i]; |
596 } | 596 } |
597 | 597 |
598 return p - *out; | 598 return p - *out; |
599 } | |
600 | |
601 static int vorbis_encode_init(AVCodecContext * avccontext) | |
602 { | |
603 venc_context_t * venc = avccontext->priv_data; | |
604 | |
605 create_vorbis_context(venc, avccontext); | |
606 | |
607 //if (avccontext->flags & CODEC_FLAG_QSCALE) avccontext->global_quality / (float)FF_QP2LAMBDA); else avccontext->bit_rate; | |
608 //if(avccontext->cutoff > 0) cfreq = avccontext->cutoff / 1000.0; | |
609 | |
610 avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata); | |
611 | |
612 avccontext->frame_size = 1 << (venc->blocksize[0] - 1); | |
613 | |
614 avccontext->coded_frame = avcodec_alloc_frame(); | |
615 avccontext->coded_frame->key_frame = 1; | |
616 | |
617 return 0; | |
618 } | |
619 | |
620 static int window(venc_context_t * venc, signed short * audio, int samples) { | |
621 int i, j, channel; | |
622 const float * win = venc->win[0]; | |
623 int window_len = 1 << (venc->blocksize[0] - 1); | |
624 float n = (float)(1 << venc->blocksize[0]) / 4.; | |
625 // FIXME use dsp | |
626 | |
627 if (!venc->have_saved && !samples) return 0; | |
628 | |
629 if (venc->have_saved) { | |
630 for (channel = 0; channel < venc->channels; channel++) { | |
631 memcpy(venc->samples + channel*window_len*2, venc->saved + channel*window_len, sizeof(float)*window_len); | |
632 } | |
633 } else { | |
634 for (channel = 0; channel < venc->channels; channel++) { | |
635 memset(venc->samples + channel*window_len*2, 0, sizeof(float)*window_len); | |
636 } | |
637 } | |
638 | |
639 if (samples) { | |
640 for (channel = 0; channel < venc->channels; channel++) { | |
641 float * offset = venc->samples + channel*window_len*2 + window_len; | |
642 j = channel; | |
643 for (i = 0; i < samples; i++, j += venc->channels) | |
644 offset[i] = audio[j] / 32768. * win[window_len - i] / n; | |
645 } | |
646 } else { | |
647 for (channel = 0; channel < venc->channels; channel++) { | |
648 memset(venc->samples + channel*window_len*2 + window_len, 0, sizeof(float)*window_len); | |
649 } | |
650 } | |
651 | |
652 for (channel = 0; channel < venc->channels; channel++) { | |
653 ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel*window_len, venc->samples + channel*window_len*2, venc->floor/*tmp*/); | |
654 } | |
655 | |
656 if (samples) { | |
657 for (channel = 0; channel < venc->channels; channel++) { | |
658 float * offset = venc->saved + channel*window_len; | |
659 j = channel; | |
660 for (i = 0; i < samples; i++, j += venc->channels) | |
661 offset[i] = audio[j] / 32768. * win[i] / n; | |
662 } | |
663 venc->have_saved = 1; | |
664 } else { | |
665 venc->have_saved = 0; | |
666 } | |
667 return 1; | |
668 } | 599 } |
669 | 600 |
670 static float * put_vector(codebook_t * book, PutBitContext * pb, float * num) { | 601 static float * put_vector(codebook_t * book, PutBitContext * pb, float * num) { |
671 int i; | 602 int i; |
672 int entry = -1; | 603 int entry = -1; |
726 } | 657 } |
727 } | 658 } |
728 } | 659 } |
729 } | 660 } |
730 | 661 |
662 static int window(venc_context_t * venc, signed short * audio, int samples) { | |
663 int i, j, channel; | |
664 const float * win = venc->win[0]; | |
665 int window_len = 1 << (venc->blocksize[0] - 1); | |
666 float n = (float)(1 << venc->blocksize[0]) / 4.; | |
667 // FIXME use dsp | |
668 | |
669 if (!venc->have_saved && !samples) return 0; | |
670 | |
671 if (venc->have_saved) { | |
672 for (channel = 0; channel < venc->channels; channel++) { | |
673 memcpy(venc->samples + channel*window_len*2, venc->saved + channel*window_len, sizeof(float)*window_len); | |
674 } | |
675 } else { | |
676 for (channel = 0; channel < venc->channels; channel++) { | |
677 memset(venc->samples + channel*window_len*2, 0, sizeof(float)*window_len); | |
678 } | |
679 } | |
680 | |
681 if (samples) { | |
682 for (channel = 0; channel < venc->channels; channel++) { | |
683 float * offset = venc->samples + channel*window_len*2 + window_len; | |
684 j = channel; | |
685 for (i = 0; i < samples; i++, j += venc->channels) | |
686 offset[i] = audio[j] / 32768. * win[window_len - i] / n; | |
687 } | |
688 } else { | |
689 for (channel = 0; channel < venc->channels; channel++) { | |
690 memset(venc->samples + channel*window_len*2 + window_len, 0, sizeof(float)*window_len); | |
691 } | |
692 } | |
693 | |
694 for (channel = 0; channel < venc->channels; channel++) { | |
695 ff_mdct_calc(&venc->mdct[0], venc->coeffs + channel*window_len, venc->samples + channel*window_len*2, venc->floor/*tmp*/); | |
696 } | |
697 | |
698 if (samples) { | |
699 for (channel = 0; channel < venc->channels; channel++) { | |
700 float * offset = venc->saved + channel*window_len; | |
701 j = channel; | |
702 for (i = 0; i < samples; i++, j += venc->channels) | |
703 offset[i] = audio[j] / 32768. * win[i] / n; | |
704 } | |
705 venc->have_saved = 1; | |
706 } else { | |
707 venc->have_saved = 0; | |
708 } | |
709 return 1; | |
710 } | |
711 | |
712 static int vorbis_encode_init(AVCodecContext * avccontext) | |
713 { | |
714 venc_context_t * venc = avccontext->priv_data; | |
715 | |
716 create_vorbis_context(venc, avccontext); | |
717 | |
718 //if (avccontext->flags & CODEC_FLAG_QSCALE) avccontext->global_quality / (float)FF_QP2LAMBDA); else avccontext->bit_rate; | |
719 //if(avccontext->cutoff > 0) cfreq = avccontext->cutoff / 1000.0; | |
720 | |
721 avccontext->extradata_size = put_main_header(venc, (uint8_t**)&avccontext->extradata); | |
722 | |
723 avccontext->frame_size = 1 << (venc->blocksize[0] - 1); | |
724 | |
725 avccontext->coded_frame = avcodec_alloc_frame(); | |
726 avccontext->coded_frame->key_frame = 1; | |
727 | |
728 return 0; | |
729 } | |
730 | |
731 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) | 731 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data) |
732 { | 732 { |
733 venc_context_t * venc = avccontext->priv_data; | 733 venc_context_t * venc = avccontext->priv_data; |
734 signed short * audio = data; | 734 signed short * audio = data; |
735 int samples = data ? avccontext->frame_size : 0; | 735 int samples = data ? avccontext->frame_size : 0; |