cannam@86: /******************************************************************** cannam@86: * * cannam@86: * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * cannam@86: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * cannam@86: * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * cannam@86: * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * cannam@86: * * cannam@86: * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * cannam@86: * by the Xiph.Org Foundation http://www.xiph.org/ * cannam@86: * * cannam@86: ******************************************************************** cannam@86: cannam@86: function: PCM data envelope analysis and manipulation cannam@86: last mod: $Id: envelope.h 16227 2009-07-08 06:58:46Z xiphmont $ cannam@86: cannam@86: ********************************************************************/ cannam@86: cannam@86: #ifndef _V_ENVELOPE_ cannam@86: #define _V_ENVELOPE_ cannam@86: cannam@86: #include "mdct.h" cannam@86: cannam@86: #define VE_PRE 16 cannam@86: #define VE_WIN 4 cannam@86: #define VE_POST 2 cannam@86: #define VE_AMP (VE_PRE+VE_POST-1) cannam@86: cannam@86: #define VE_BANDS 7 cannam@86: #define VE_NEARDC 15 cannam@86: cannam@86: #define VE_MINSTRETCH 2 /* a bit less than short block */ cannam@86: #define VE_MAXSTRETCH 12 /* one-third full block */ cannam@86: cannam@86: typedef struct { cannam@86: float ampbuf[VE_AMP]; cannam@86: int ampptr; cannam@86: cannam@86: float nearDC[VE_NEARDC]; cannam@86: float nearDC_acc; cannam@86: float nearDC_partialacc; cannam@86: int nearptr; cannam@86: cannam@86: } envelope_filter_state; cannam@86: cannam@86: typedef struct { cannam@86: int begin; cannam@86: int end; cannam@86: float *window; cannam@86: float total; cannam@86: } envelope_band; cannam@86: cannam@86: typedef struct { cannam@86: int ch; cannam@86: int winlength; cannam@86: int searchstep; cannam@86: float minenergy; cannam@86: cannam@86: mdct_lookup mdct; cannam@86: float *mdct_win; cannam@86: cannam@86: envelope_band band[VE_BANDS]; cannam@86: envelope_filter_state *filter; cannam@86: int stretch; cannam@86: cannam@86: int *mark; cannam@86: cannam@86: long storage; cannam@86: long current; cannam@86: long curmark; cannam@86: long cursor; cannam@86: } envelope_lookup; cannam@86: cannam@86: extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi); cannam@86: extern void _ve_envelope_clear(envelope_lookup *e); cannam@86: extern long _ve_envelope_search(vorbis_dsp_state *v); cannam@86: extern void _ve_envelope_shift(envelope_lookup *e,long shift); cannam@86: extern int _ve_envelope_mark(vorbis_dsp_state *v); cannam@86: cannam@86: cannam@86: #endif