"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-2010 * 00009 * by the Xiph.Org Foundation http://www.xiph.org/ * 00010 * * 00011 ******************************************************************** 00012 00013 function: residue backend 0, 1 and 2 implementation 00014 last mod: $Id: res0.c 17556 2010-10-21 18:25:19Z tterribe $ 00015 00016 ********************************************************************/ 00017 00018 00019 #ifndef __LSS_VORBISRES0_H__ 00020 #define __LSS_VORBISRES0_H__ 00021 00022 #include "../LSSSoundLib.h" 00023 #include "LSSVorbisBackends.h" 00024 #include "LSSVorbisCodeBook.h" 00025 00026 namespace lss { 00027 00034 class CVorbisRes0 { 00035 public : 00036 // == Members. 00040 static const CVorbisBackends::vorbis_func_residue residue0_exportbundle; 00041 00045 static const CVorbisBackends::vorbis_func_residue residue1_exportbundle; 00046 00050 static const CVorbisBackends::vorbis_func_residue residue2_exportbundle; 00051 00052 protected : 00053 // == Types. 00057 typedef struct vorbis_look_residue0 { 00058 CVorbisBackends::vorbis_info_residue0 * info; 00059 00060 LSINT32 parts; 00061 LSINT32 stages; 00062 CVorbisCodeBook::codebook * fullbooks; 00063 CVorbisCodeBook::codebook * phrasebook; 00064 CVorbisCodeBook::codebook *** partbooks; 00065 00066 LSINT32 partvals; 00067 LSINT32 ** decodemap; 00068 00069 LSINT32 postbits; 00070 LSINT32 phrasebits; 00071 LSINT32 frames; 00072 } * LPvorbis_look_residue0, * LPCvorbis_look_residue0; 00073 00074 00075 // == Functions. 00081 static LSVOID res0_free_info( CVorbisStructs::vorbis_info_residue * _pvirI ); 00082 00088 static LSVOID res0_free_look( CVorbisStructs::vorbis_look_residue * _pvlrI ); 00089 00096 static LSVOID res0_pack( CVorbisStructs::vorbis_info_residue * _pvirVr, COgg::oggpack_buffer * _pobOpb ); 00097 00105 static CVorbisStructs::vorbis_info_residue * res0_unpack( CVorbisCodec::vorbis_info * _pviVi, COgg::oggpack_buffer * _pobOpb ); 00106 00114 static CVorbisStructs::vorbis_look_residue * res0_look( CVorbisCodec::vorbis_dsp_state * _pvdsVd, 00115 CVorbisStructs::vorbis_info_residue * _pvirVr ); 00116 00127 static LSINT32 res0_inverse( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, LSFLOAT ** _ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch ); 00128 00139 static LSINT32 ** res1_class( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00140 LSINT32 ** _ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch ); 00141 00155 static LSINT32 res1_forward( COgg::oggpack_buffer * _pobOpb, CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00156 LSINT32 ** _ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch, LSINT32 ** _ppi32PartWord, LSINT32 _i32SubMap ); 00157 00168 static LSINT32 res1_inverse( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00169 LSFLOAT ** _ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch ); 00170 00181 static LSINT32 ** res2_class( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00182 LSINT32 ** _ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch ); 00183 00197 static LSINT32 res2_forward( COgg::oggpack_buffer * _pbOpb, 00198 CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00199 LSINT32 ** _ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch, LSINT32 ** i32PartWord, LSINT32 i32SubMap ); 00200 00211 static LSINT32 res2_inverse( CVorbisCodec::vorbis_block *_pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00212 LSFLOAT **_ppi32In, LSINT32 * _pi32NonZero, LSINT32 _i32Ch ); 00213 00214 00215 protected : 00222 static LSINT32 ilog( LSUINT32 _ui32V ); 00223 00230 static LSINT32 icount( LSUINT32 _ui32V ); 00231 00241 static LSINT32 ** _01class( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00242 LSINT32 ** _ppi32In, LSINT32 _i32Ch ); 00243 00254 static LSINT32 _encodepart( COgg::oggpack_buffer * _pobOpb, LSINT32 * _pi32Vec, LSINT32 _i32N, 00255 CVorbisCodeBook::codebook * _pcbBook, LSINT32 * _pi32Acc ); 00256 00270 static LSINT32 _01forward( COgg::oggpack_buffer * _pobOpb, CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00271 LSINT32 ** _ppi32In, LSINT32 _i32Ch, 00272 LSINT32 ** _ppi32PartWord, 00273 LSINT32 (* _pfEncode)( COgg::oggpack_buffer *, LSINT32 *, LSINT32, CVorbisCodeBook::codebook *, LSINT32 * ), 00274 LSINT32 _i32SubMap ); 00275 00283 static LSINT32 local_book_besterror( CVorbisCodeBook::codebook * _pcbBook, LSINT32 * _pi32A ); 00284 00295 static LSINT32 _01inverse( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, 00296 LSFLOAT ** _ppi32In, LSINT32 _i32Ch, 00297 LSINT32 (* _pfEncode)( CVorbisCodeBook::codebook *, LSFLOAT *, COgg::oggpack_buffer *, LSINT32 ) ); 00298 00308 static LSINT32 ** _2class( CVorbisCodec::vorbis_block * _pvbVb, CVorbisStructs::vorbis_look_residue * _pvlrVl, LSINT32 ** _ppi32In, 00309 LSINT32 _i32Ch ); 00310 }; 00311 00312 } // namespace lss 00313 00314 #endif // __LSS_VORBISRES0_H__ 00315