|
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: PCM data envelope analysis and manipulation |
|
14 last mod: $Id: envelope.h 16227 2009-07-08 06:58:46Z xiphmont $ |
|
15 |
|
16 ********************************************************************/ |
|
17 |
|
18 #ifndef _V_ENVELOPE_ |
|
19 #define _V_ENVELOPE_ |
|
20 |
|
21 #include "mdct.h" |
|
22 |
|
23 #define VE_PRE 16 |
|
24 #define VE_WIN 4 |
|
25 #define VE_POST 2 |
|
26 #define VE_AMP (VE_PRE+VE_POST-1) |
|
27 |
|
28 #define VE_BANDS 7 |
|
29 #define VE_NEARDC 15 |
|
30 |
|
31 #define VE_MINSTRETCH 2 /* a bit less than short block */ |
|
32 #define VE_MAXSTRETCH 12 /* one-third full block */ |
|
33 |
|
34 typedef struct { |
|
35 float ampbuf[VE_AMP]; |
|
36 int ampptr; |
|
37 |
|
38 float nearDC[VE_NEARDC]; |
|
39 float nearDC_acc; |
|
40 float nearDC_partialacc; |
|
41 int nearptr; |
|
42 |
|
43 } envelope_filter_state; |
|
44 |
|
45 typedef struct { |
|
46 int begin; |
|
47 int end; |
|
48 float *window; |
|
49 float total; |
|
50 } envelope_band; |
|
51 |
|
52 typedef struct { |
|
53 int ch; |
|
54 int winlength; |
|
55 int searchstep; |
|
56 float minenergy; |
|
57 |
|
58 mdct_lookup mdct; |
|
59 float *mdct_win; |
|
60 |
|
61 envelope_band band[VE_BANDS]; |
|
62 envelope_filter_state *filter; |
|
63 int stretch; |
|
64 |
|
65 int *mark; |
|
66 |
|
67 long storage; |
|
68 long current; |
|
69 long curmark; |
|
70 long cursor; |
|
71 } envelope_lookup; |
|
72 |
|
73 extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi); |
|
74 extern void _ve_envelope_clear(envelope_lookup *e); |
|
75 extern long _ve_envelope_search(vorbis_dsp_state *v); |
|
76 extern void _ve_envelope_shift(envelope_lookup *e,long shift); |
|
77 extern int _ve_envelope_mark(vorbis_dsp_state *v); |
|
78 |
|
79 |
|
80 #endif |