45 const static_bookblock *books_base;
46 const static_bookblock *books_base_managed;
47 } vorbis_residue_template;
51 const vorbis_residue_template *
res;
52 } vorbis_mapping_template;
94 const double *rate_mapping;
95 const double *quality_mapping;
96 int coupling_restriction;
97 long samplerate_min_restriction;
98 long samplerate_max_restriction;
101 const int *blocksize_short;
102 const int *blocksize_long;
104 const att3 *psy_tone_masteratt;
105 const int *psy_tone_0dB;
106 const int *psy_tone_dBsuppress;
112 const noiseguard *psy_noiseguards;
113 const noise3 *psy_noise_bias_impulse;
114 const noise3 *psy_noise_bias_padding;
115 const noise3 *psy_noise_bias_trans;
116 const noise3 *psy_noise_bias_long;
117 const int *psy_noise_dBsuppress;
119 const compandblock *psy_noise_compand;
120 const double *psy_noise_compand_short_mapping;
121 const double *psy_noise_compand_long_mapping;
123 const int *psy_noise_normal_start[2];
124 const int *psy_noise_normal_partition[2];
125 const double *psy_noise_normal_thresh;
127 const int *psy_ath_float;
128 const int *psy_ath_abs;
130 const double *psy_lowpass;
133 const double *global_mapping;
134 const adj_stereo *stereo_modes;
138 const int floor_mappings;
139 const int **floor_mapping_list;
141 const vorbis_mapping_template *maps;
142 } ve_setup_data_template;
151 {1, {0,0}, {0}, {0}, 1,{0},{1}},
152 {1, {0,0}, {1}, {1}, 1,{0},{1}}
198 memcpy(f,in+x[is],
sizeof(*f));
205 for(i=0;i<partitions;i++)
207 for(i=0;i<=maxclass;i++){
216 for(i=0;i<=maxbook;i++)
236 memcpy(g,in+(
int)x[is],
sizeof(*g));
238 ds=x[is]*(1.-ds)+x[is+1]*ds;
257 const adj_stereo *
p){
271 float kHz=p[is].kHz[
i]*(1.-ds)+p[is+1].kHz[i]*ds;
276 kHz=p[is].lowpasskHz[
i]*(1.-ds)+p[is+1].lowpasskHz[i]*ds;
282 float kHz=p[is].kHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].kHz[PACKETBLOBS/2]*ds;
289 kHz=p[is].lowpasskHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].lowpasskHz[PACKETBLOBS/2]*ds;
306 const int *nn_partition,
307 const double *nn_thresh,
349 p->
tone_decay=att[is].decay*(1.-ds)+att[is+1].decay*ds;
354 p->
toneatt[i]=in[is].block[i]*(1.-ds)+in[is+1].block[
i]*ds;
360 const compandblock *
in,
367 ds=x[is]*(1.-ds)+x[is+1]*ds;
377 p->
noisecompand[i]=in[is].data[i]*(1.-ds)+in[is+1].data[
i]*ds;
382 const int *suppress){
396 const noiseguard *guard,
410 p->
noiseoff[j][i]=in[is].data[j][i]*(1.-ds)+in[is+1].data[
j][
i]*ds;
437 for(i=0;i<ci->
books;i++)
444 const int *shortb,
const int *longb){
449 int blockshort=shortb[is];
450 int blocklong=longb[is];
457 int number,
int block,
458 const vorbis_residue_template *
res){
466 memcpy(r,res->res,
sizeof(*r));
479 if(res->books_base_managed->books[i][
k])
485 for(i=0;i<r->partitions;i++){
487 if(res->books_base_managed->books[i][k]){
499 if(res->books_base->books[i][
k])
505 for(i=0;i<r->partitions;i++){
507 if(res->books_base->books[i][k]){
521 double nyq=vi->
rate/2.;
525 if(freq>nyq)freq=nyq;
529 f->
n=freq/nyq*blocksize;
533 switch(res->limit_type){
539 if(freq>nyq)freq=nyq;
560 for(i=0;i<ci->
maps&&ch==0;i++){
562 for(j=0;j<mi->submaps && ch==0;j++)
590 const vorbis_mapping_template *maps){
593 int i,
j,is=
s,modes=2;
596 const vorbis_residue_template *
res=maps[is].res;
600 for(i=0;i<modes;i++){
614 ,res+map[i].residuesubmap[j]);
621 ve_setup_data_template *setup=(ve_setup_data_template *)hi->
setup;
625 const double *
r=setup->rate_mapping;
630 return((
r[is]*(1.-ds)+
r[is+1]*ds)*ch);
634 double req,
int q_or_bitrate,
635 double *base_setting){
637 if(q_or_bitrate)req/=ch;
642 if(srate>=
setup_list[i]->samplerate_min_restriction &&
643 srate<=
setup_list[i]->samplerate_max_restriction){
645 const double *
map=(q_or_bitrate?
651 if(req<map[0]){++
i;
continue;}
652 if(req>map[
setup_list[i]->mappings]){++
i;
continue;}
653 for(
j=0;
j<mappings;
j++)
654 if(req>=map[
j] && req<map[
j+1])
break;
657 *base_setting=
j-.001;
661 float del=(req-
low)/(high-low);
682 int i,i0=0,singleblock=0;
684 ve_setup_data_template *setup=
NULL;
701 setup=(ve_setup_data_template *)hi->
setup;
710 setup->blocksize_short,
711 setup->blocksize_long);
716 for(i=0;i<setup->floor_mappings;i++)
720 setup->floor_mapping_list[i]);
724 setup->global_params,
725 setup->global_mapping);
730 setup->psy_noise_normal_start[0],
731 setup->psy_noise_normal_partition[0],
732 setup->psy_noise_normal_thresh,
735 setup->psy_noise_normal_start[0],
736 setup->psy_noise_normal_partition[0],
737 setup->psy_noise_normal_thresh,
741 setup->psy_noise_normal_start[1],
742 setup->psy_noise_normal_partition[1],
743 setup->psy_noise_normal_thresh,
746 setup->psy_noise_normal_start[1],
747 setup->psy_noise_normal_partition[1],
748 setup->psy_noise_normal_thresh,
754 setup->psy_tone_masteratt,
756 setup->psy_tone_adj_impulse);
758 setup->psy_tone_masteratt,
760 setup->psy_tone_adj_other);
763 setup->psy_tone_masteratt,
765 setup->psy_tone_adj_other);
767 setup->psy_tone_masteratt,
769 setup->psy_tone_adj_long);
774 setup->psy_noise_compand,
775 setup->psy_noise_compand_short_mapping);
777 setup->psy_noise_compand,
778 setup->psy_noise_compand_short_mapping);
781 setup->psy_noise_compand,
782 setup->psy_noise_compand_long_mapping);
784 setup->psy_noise_compand,
785 setup->psy_noise_compand_long_mapping);
790 setup->psy_tone_dBsuppress);
792 setup->psy_tone_dBsuppress);
795 setup->psy_tone_dBsuppress);
797 setup->psy_tone_dBsuppress);
802 setup->psy_noise_dBsuppress,
803 setup->psy_noise_bias_impulse,
804 setup->psy_noiseguards,
807 setup->psy_noise_dBsuppress,
808 setup->psy_noise_bias_padding,
809 setup->psy_noiseguards,0.);
812 setup->psy_noise_dBsuppress,
813 setup->psy_noise_bias_trans,
814 setup->psy_noiseguards,0.);
816 setup->psy_noise_dBsuppress,
817 setup->psy_noise_bias_long,
818 setup->psy_noiseguards,0.);
867 const ve_setup_data_template *setup=hi->
setup;
884 setup->psy_lowpass[is]*(1.-ds)+setup->psy_lowpass[is+1]*ds;
887 setup->psy_ath_float[is+1]*ds;
889 setup->psy_ath_abs[is+1]*ds;
910 if(quality>=1.)quality=.9999;
948 long nominal_bitrate,
953 double tnominal=nominal_bitrate;
955 if(nominal_bitrate<=0.){
958 nominal_bitrate=(max_bitrate+min_bitrate)*.5;
960 nominal_bitrate=max_bitrate*.875;
963 nominal_bitrate=min_bitrate;
970 hi->
req=nominal_bitrate;
995 long nominal_bitrate,
1017 int setp=(number&0xf);
1152 double *farg=(
double *)arg;
1158 double *farg=(
double *)arg;
1168 double *farg=(
double *)arg;
1174 double *farg=(
double *)arg;
1183 int *iarg=(
int *)arg;
1189 const void *new_template;
1191 int *iarg=(
int *)arg;
1206 hi->
setup=new_template;
int class_subbook[VIF_CLASS][8]
#define OV_ECTL_RATEMANAGE2_SET
int vorbis_encode_setup_init(vorbis_info *vi)
static const ve_setup_data_template ve_setup_XX_stereo
vorbis_info_residue * residue_param[64]
static const ve_setup_data_template ve_setup_32_uncoupled
long bitrate_limit_max_kbps
static const ve_setup_data_template *const setup_list[]
#define OV_ECTL_RATEMANAGE_GET
static int book_dup_or_new(codec_setup_info *ci, const static_codebook *book)
vorbis_info_floor * floor_param[64]
static_codebook * book_param[256]
int sliding_lowpass[2][PACKETBLOBS]
static void vorbis_encode_global_psych_setup(vorbis_info *vi, double s, const vorbis_info_psy_global *in, const double *x)
static const vorbis_info_mode _mode_template[2]
#define OV_ECTL_RATEMANAGE_SET
long bitrate_limit_reservoir_bits
highlevel_byblocktype block[4]
int vorbis_encode_setup_managed(vorbis_info *vi, long channels, long rate, long max_bitrate, long nominal_bitrate, long min_bitrate)
double bitrate_average_damping
int class_subs[VIF_CLASS]
static void vorbis_encode_setup_setting(vorbis_info *vi, long channels, long rate)
static void vorbis_encode_blocksize_setup(vorbis_info *vi, double s, const int *shortb, const int *longb)
static double setting_to_approx_bitrate(vorbis_info *vi)
#define OV_ECTL_COUPLING_SET
static const ve_setup_data_template ve_setup_44_uncoupled
static const ve_setup_data_template ve_setup_44_stereo
int vorbis_encode_init(vorbis_info *vi, long channels, long rate, long max_bitrate, long nominal_bitrate, long min_bitrate)
double noise_bias_setting
vorbis_info_mode * mode_param[64]
static void vorbis_encode_global_stereo(vorbis_info *vi, const highlevel_encode_setup *const hi, const adj_stereo *p)
float noiseoff[P_NOISECURVES][P_BANDS]
static const ve_setup_data_template ve_setup_11_uncoupled
int partitionclass[VIF_PARTS]
double bitrate_limit_reservoir_bias
long bitrate_average_kbps
#define OV_ECTL_LOWPASS_GET
int vorbis_encode_ctl(vorbis_info *vi, int number, void *arg)
static const void * get_setup_template(long ch, long srate, double req, int q_or_bitrate, double *base_setting)
double bitrate_av_window_center
int coupling_postpointamp[PACKETBLOBS]
static const ve_setup_data_template ve_setup_XX_uncoupled
long bitrate_limit_min_kbps
#define OV_ECTL_RATEMANAGE2_GET
static const ve_setup_data_template ve_setup_44_51
static const vorbis_info_psy _psy_info_template
int vorbis_encode_setup_vbr(vorbis_info *vi, long channels, long rate, float quality)
vorbis_info_psy_global psy_g_param
static void vorbis_encode_compand_setup(vorbis_info *vi, double s, int block, const compandblock *in, const double *x)
highlevel_encode_setup hi
static const ve_setup_data_template ve_setup_8_stereo
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
static const ve_setup_data_template ve_setup_11_stereo
#define NOISE_COMPAND_LEVELS
static const ve_setup_data_template ve_setup_22_stereo
#define OV_ECTL_IBLOCK_SET
double bitrate_hard_window
static const ve_setup_data_template ve_setup_22_uncoupled
static const ve_setup_data_template ve_setup_16_stereo
static const ve_setup_data_template ve_setup_32_stereo
#define OV_ECTL_RATEMANAGE_HARD
float noisecompand[NOISE_COMPAND_LEVELS]
static void vorbis_encode_psyset_setup(vorbis_info *vi, double s, const int *nn_start, const int *nn_partition, const double *nn_thresh, int block)
static void vorbis_encode_ath_setup(vorbis_info *vi, int block)
int coupling_pkHz[PACKETBLOBS]
#define OV_ECTL_RATEMANAGE_AVG
int vorbis_encode_init_vbr(vorbis_info *vi, long channels, long rate, float base_quality)
double stereo_point_setting
float preecho_thresh[VE_BANDS]
double amplitude_track_dBpersec
float tone_masteratt[P_NOISECURVES]
int coupling_prepointamp[PACKETBLOBS]
double noise_compand_setting
static void vorbis_encode_tonemask_setup(vorbis_info *vi, double s, int block, const att3 *att, const int *max, const vp_adjblock *in)
#define OV_ECTL_IBLOCK_GET
void vorbis_info_clear(vorbis_info *vi)
static void vorbis_encode_floor_setup(vorbis_info *vi, int s, const static_codebook *const *const *const books, const vorbis_info_floor1 *in, const int *x)
#define OV_ECTL_COUPLING_GET
GLdouble GLdouble GLdouble r
static const ve_setup_data_template ve_setup_X_stereo
#define OV_ECTL_LOWPASS_SET
static const ve_setup_data_template ve_setup_8_uncoupled
vorbis_info_psy * psy_param[4]
const GLubyte GLuint GLuint GLuint GLuint alpha GLboolean GLboolean GLboolean GLboolean alpha GLint GLint GLsizei GLsizei GLenum type GLenum GLint GLenum GLint GLint GLsizei GLsizei GLint border GLenum GLint GLint GLint GLint GLint GLsizei GLsizei height GLsizei GLsizei GLenum GLenum const GLvoid *pixels GLenum GLint GLint GLint GLint j2 GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble zFar GLenum GLenum GLint *params GLenum GLenum GLint *params GLenum GLenum GLint *params GLenum GLenum GLfloat *params GLenum GLint GLenum GLenum GLvoid *pixels GLenum GLint GLenum GLint *params GLenum GLenum GLint *params GLenum GLsizei const GLvoid *pointer GLenum GLenum const GLint *params GLenum GLfloat GLfloat GLint GLint const GLfloat *points GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat *points GLint GLfloat GLfloat GLint GLfloat GLfloat v2 GLenum GLenum const GLint *params GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble zFar GLenum map
static const ve_setup_data_template ve_setup_16_uncoupled
struct vp_adjblock vp_adjblock
static void vorbis_encode_peak_setup(vorbis_info *vi, double s, int block, const int *suppress)
double bitrate_reservoir_bias
static void vorbis_encode_map_n_res_setup(vorbis_info *vi, double s, const vorbis_mapping_template *maps)
static const ve_setup_data_template ve_setup_X_uncoupled
int coupling_pointlimit[2][PACKETBLOBS]
int class_book[VIF_CLASS]
double tone_peaklimit_setting
static const vorbis_info_mapping0 _map_nominal[2]
static void vorbis_encode_noisebias_setup(vorbis_info *vi, double s, int block, const int *suppress, const noise3 *in, const noiseguard *guard, double userbias)
static void vorbis_encode_residue_setup(vorbis_info *vi, int number, int block, const vorbis_residue_template *res)
float postecho_thresh[VE_BANDS]
vorbis_info_mapping * map_param[64]