"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSSoundLib/Src/Ogg/LSSVorbisEnvelope.h

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 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator