| Line | |
|---|
| 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-2007 * |
|---|
| 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 13293 2007-07-24 00:09:47Z 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 |
|---|
| 81 | |
|---|
Note: See
TracBrowser
for help on using the repository browser.