105 float *
vec=alloca(n*
sizeof(*vec));
111 if(penalty<0.
f)penalty=0.f;
127 float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2];
140 filters->
nearDC[ptr]=temp;
145 decay=
todB(&decay)*.5-15.f;
152 float val=vec[
i]*vec[
i]+vec[i+1]*vec[i+1];
154 if(val<decay)val=decay;
155 if(val<minV)val=minV;
168 for(i=0;i<bands[
j].
end;i++)
169 acc+=vec[i+bands[j].begin]*bands[j].window[i];
176 float postmax,postmin,premax=-99999.f,premin=99999.f;
181 postmax=
max(acc,filters[j].ampbuf[p]);
182 postmin=
min(acc,filters[j].ampbuf[p]);
184 for(i=0;i<stretch;i++){
187 premax=
max(premax,filters[j].ampbuf[p]);
188 premin=
min(premin,filters[j].ampbuf[p]);
191 valmin=postmin-premin;
192 valmax=postmax-premax;
205 if(valmin<gi->postecho_thresh[j]-penalty)ret|=2;
233 for(j=first;j<last;j++){
240 for(i=0;i<ve->
ch;i++){
253 if(j>0)ve->
mark[j-1]=1;
273 if(j>=testW)
return(1);
285 fprintf(stderr,
"mark! seq=%d, cursor:%fs time:%fs\n",
287 (totalshift+ve->
cursor)/44100.,
288 (totalshift+j)/44100.);
289 _analysis_output_always(
"pcmL",seq,v->
pcm[0],v->
pcm_current,0,0,totalshift);
290 _analysis_output_always(
"pcmR",seq,v->
pcm[1],v->
pcm_current,0,0,totalshift);
292 _analysis_output_always(
"markL",seq,v->
pcm[0],j,0,0,totalshift);
293 _analysis_output_always(
"markR",seq,v->
pcm[1],j,0,0,totalshift);
297 sprintf(buf,
"delL%d",m);
299 _analysis_output_always(buf,seq,marker,v->
pcm_current,0,0,totalshift);
304 sprintf(buf,
"delR%d",m);
305 for(l=0;l<last;l++)marker[l*ve->
searchstep]=ve->
filter[m+VE_BANDS].markers[l]*.1;
306 _analysis_output_always(buf,seq,marker,v->
pcm_current,0,0,totalshift);
310 _analysis_output_always(
"mark",seq,marker,v->
pcm_current,0,0,totalshift);
319 if(j>=testW)
return(1);
350 for(i=first;i<last;i++)
351 if(ve->
mark[i])
return(1);
366 e->
filter[
i].markers+smallshift,
367 (1024-smallshift)*
sizeof(*(*e->
filter).markers));
GLuint const GLfloat * val
void _ve_envelope_shift(envelope_lookup *e, long shift)
return Display return Display Bool Bool int int e
void mdct_init(mdct_lookup *lookup, int n)
void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out)
int _ve_envelope_mark(vorbis_dsp_state *v)
void _ve_envelope_clear(envelope_lookup *e)
void _ve_envelope_init(envelope_lookup *e, vorbis_info *vi)
static int _ve_amp(envelope_lookup *ve, vorbis_info_psy_global *gi, float *data, envelope_band *bands, envelope_filter_state *filters)
vorbis_info_psy_global psy_g_param
envelope_filter_state * filter
static float todB(const float *x)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
float preecho_thresh[VE_BANDS]
GLenum GLuint GLsizei const GLchar * buf
envelope_band band[VE_BANDS]
void mdct_clear(mdct_lookup *l)
long _ve_envelope_search(vorbis_dsp_state *v)