"L. Spiro Engine"
|
00001 /******************************************************************** 00002 * * 00003 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 00004 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 00005 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 00006 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 00007 * * 00008 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * 00009 * by the Xiph.Org Foundation http://www.xiph.org/ * 00010 * * 00011 ******************************************************************** 00012 00013 function: PCM data envelope analysis and manipulation 00014 last mod: $Id: envelope.h 16227 2009-07-08 06:58:46Z xiphmont $ 00015 00016 ********************************************************************/ 00017 00018 00019 #ifndef __LSS_VORBISENVELOPE_H__ 00020 #define __LSS_VORBISENVELOPE_H__ 00021 00022 #include "../LSSSoundLib.h" 00023 #include "LSSVorbisCodec.h" 00024 #include "LSSVorbisConstants.h" 00025 #include "LSSVorbisMdct.h" 00026 #include "LSSVorbisPsy.h" 00027 00028 namespace lss { 00029 00036 class CVorbisEnvelope { 00037 public : 00038 // == Types. 00042 typedef struct envelope_filter_state { 00043 LSFLOAT ampbuf[VE_AMP]; 00044 LSINT32 ampptr; 00045 00046 LSFLOAT nearDC[VE_NEARDC]; 00047 LSFLOAT nearDC_acc; 00048 LSFLOAT nearDC_partialacc; 00049 LSINT32 nearptr; 00050 } * LPenvelope_filter_state, * const LPCenvelope_filter_state; 00051 00055 typedef struct envelope_band { 00056 LSINT32 begin; 00057 LSINT32 end; 00058 LSFLOAT * window; 00059 LSFLOAT total; 00060 } * LPenvelope_band, * const LPCenvelope_band; 00061 00065 typedef struct envelope_lookup { 00066 LSINT32 ch; 00067 LSINT32 winlength; 00068 LSINT32 searchstep; 00069 LSFLOAT minenergy; 00070 00071 CVorbisMdct::mdct_lookup mdct; 00072 LSFLOAT * mdct_win; 00073 00074 envelope_band band[VE_BANDS]; 00075 envelope_filter_state * filter; 00076 LSINT32 stretch; 00077 00078 LSINT32 * mark; 00079 00080 LSINT32 storage; 00081 LSINT32 current; 00082 LSINT32 curmark; 00083 LSINT32 cursor; 00084 } * LPenvelope_lookup, * const LPCenvelope_lookup; 00085 00086 00087 // == Functions. 00094 static LSVOID _ve_envelope_init( envelope_lookup * _pelE, CVorbisCodec::vorbis_info * _piVi ); 00095 00101 static LSVOID _ve_envelope_clear( envelope_lookup * _pelE ); 00102 00109 static LSINT32 _ve_envelope_search( CVorbisCodec::vorbis_dsp_state * _pvdsV ); 00110 00117 static LSVOID _ve_envelope_shift( envelope_lookup * _pelE, LSINT32 _i32Shift ); 00118 00125 static LSINT32 _ve_envelope_mark( CVorbisCodec::vorbis_dsp_state * _pvdsV ); 00126 00127 00128 protected : 00129 // == Functions. 00140 static LSINT32 _ve_amp( envelope_lookup * _pelVe, 00141 CVorbisPsy::vorbis_info_psy_global * _pvisgGi, 00142 LSFLOAT * _pfData, 00143 envelope_band * _pebBands, 00144 envelope_filter_state * _pefsFilters ); 00145 }; 00146 00147 } // namespace lss 00148 00149 #endif // __LSS_VORBISENVELOPE_H__ 00150