Mercurial > hg > sv-dependency-builds
comparison src/libvorbis-1.3.3/lib/psy.h @ 86:98c1576536ae
Bring in flac, ogg, vorbis
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Tue, 19 Mar 2013 17:37:49 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
85:545efbb81310 | 86:98c1576536ae |
---|---|
1 /******************************************************************** | |
2 * * | |
3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * | |
4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * | |
5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * | |
6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * | |
7 * * | |
8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * | |
9 * by the Xiph.Org Foundation http://www.xiph.org/ * | |
10 * * | |
11 ******************************************************************** | |
12 | |
13 function: random psychoacoustics (not including preecho) | |
14 last mod: $Id: psy.h 16946 2010-03-03 16:12:40Z xiphmont $ | |
15 | |
16 ********************************************************************/ | |
17 | |
18 #ifndef _V_PSY_H_ | |
19 #define _V_PSY_H_ | |
20 #include "smallft.h" | |
21 | |
22 #include "backends.h" | |
23 #include "envelope.h" | |
24 | |
25 #ifndef EHMER_MAX | |
26 #define EHMER_MAX 56 | |
27 #endif | |
28 | |
29 /* psychoacoustic setup ********************************************/ | |
30 #define P_BANDS 17 /* 62Hz to 16kHz */ | |
31 #define P_LEVELS 8 /* 30dB to 100dB */ | |
32 #define P_LEVEL_0 30. /* 30 dB */ | |
33 #define P_NOISECURVES 3 | |
34 | |
35 #define NOISE_COMPAND_LEVELS 40 | |
36 typedef struct vorbis_info_psy{ | |
37 int blockflag; | |
38 | |
39 float ath_adjatt; | |
40 float ath_maxatt; | |
41 | |
42 float tone_masteratt[P_NOISECURVES]; | |
43 float tone_centerboost; | |
44 float tone_decay; | |
45 float tone_abs_limit; | |
46 float toneatt[P_BANDS]; | |
47 | |
48 int noisemaskp; | |
49 float noisemaxsupp; | |
50 float noisewindowlo; | |
51 float noisewindowhi; | |
52 int noisewindowlomin; | |
53 int noisewindowhimin; | |
54 int noisewindowfixed; | |
55 float noiseoff[P_NOISECURVES][P_BANDS]; | |
56 float noisecompand[NOISE_COMPAND_LEVELS]; | |
57 | |
58 float max_curve_dB; | |
59 | |
60 int normal_p; | |
61 int normal_start; | |
62 int normal_partition; | |
63 double normal_thresh; | |
64 } vorbis_info_psy; | |
65 | |
66 typedef struct{ | |
67 int eighth_octave_lines; | |
68 | |
69 /* for block long/short tuning; encode only */ | |
70 float preecho_thresh[VE_BANDS]; | |
71 float postecho_thresh[VE_BANDS]; | |
72 float stretch_penalty; | |
73 float preecho_minenergy; | |
74 | |
75 float ampmax_att_per_sec; | |
76 | |
77 /* channel coupling config */ | |
78 int coupling_pkHz[PACKETBLOBS]; | |
79 int coupling_pointlimit[2][PACKETBLOBS]; | |
80 int coupling_prepointamp[PACKETBLOBS]; | |
81 int coupling_postpointamp[PACKETBLOBS]; | |
82 int sliding_lowpass[2][PACKETBLOBS]; | |
83 | |
84 } vorbis_info_psy_global; | |
85 | |
86 typedef struct { | |
87 float ampmax; | |
88 int channels; | |
89 | |
90 vorbis_info_psy_global *gi; | |
91 int coupling_pointlimit[2][P_NOISECURVES]; | |
92 } vorbis_look_psy_global; | |
93 | |
94 | |
95 typedef struct { | |
96 int n; | |
97 struct vorbis_info_psy *vi; | |
98 | |
99 float ***tonecurves; | |
100 float **noiseoffset; | |
101 | |
102 float *ath; | |
103 long *octave; /* in n.ocshift format */ | |
104 long *bark; | |
105 | |
106 long firstoc; | |
107 long shiftoc; | |
108 int eighth_octave_lines; /* power of two, please */ | |
109 int total_octave_lines; | |
110 long rate; /* cache it */ | |
111 | |
112 float m_val; /* Masking compensation value */ | |
113 | |
114 } vorbis_look_psy; | |
115 | |
116 extern void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi, | |
117 vorbis_info_psy_global *gi,int n,long rate); | |
118 extern void _vp_psy_clear(vorbis_look_psy *p); | |
119 extern void *_vi_psy_dup(void *source); | |
120 | |
121 extern void _vi_psy_free(vorbis_info_psy *i); | |
122 extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i); | |
123 | |
124 extern void _vp_noisemask(vorbis_look_psy *p, | |
125 float *logmdct, | |
126 float *logmask); | |
127 | |
128 extern void _vp_tonemask(vorbis_look_psy *p, | |
129 float *logfft, | |
130 float *logmask, | |
131 float global_specmax, | |
132 float local_specmax); | |
133 | |
134 extern void _vp_offset_and_mix(vorbis_look_psy *p, | |
135 float *noise, | |
136 float *tone, | |
137 int offset_select, | |
138 float *logmask, | |
139 float *mdct, | |
140 float *logmdct); | |
141 | |
142 extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd); | |
143 | |
144 extern void _vp_couple_quantize_normalize(int blobno, | |
145 vorbis_info_psy_global *g, | |
146 vorbis_look_psy *p, | |
147 vorbis_info_mapping0 *vi, | |
148 float **mdct, | |
149 int **iwork, | |
150 int *nonzero, | |
151 int sliding_lowpass, | |
152 int ch); | |
153 | |
154 #endif |