"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSImageLib/Src/Jpeg/LSIDwt.h

00001 /*
00002  * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
00003  * Copyright (c) 2002-2007, Professor Benoit Macq
00004  * Copyright (c) 2001-2003, David Janssens
00005  * Copyright (c) 2002-2003, Yannick Verschueren
00006  * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
00007  * Copyright (c) 2005, Herve Drolon, FreeImage Team
00008  * All rights reserved.
00009  *
00010  * Redistribution and use in source and binary forms, with or without
00011  * modification, are permitted provided that the following conditions
00012  * are met:
00013  * 1. Redistributions of source code must retain the above copyright
00014  *    notice, this list of conditions and the following disclaimer.
00015  * 2. Redistributions in binary form must reproduce the above copyright
00016  *    notice, this list of conditions and the following disclaimer in the
00017  *    documentation and/or other materials provided with the distribution.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
00020  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00023  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00024  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00025  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00026  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00027  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00028  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00029  * POSSIBILITY OF SUCH DAMAGE.
00030  */
00031 
00032 
00033 #ifndef __LSI_DWT_H__
00034 #define __LSI_DWT_H__
00035 
00036 #include "../LSIImageLib.h"
00037 #include "LSITcd.h"
00038 #include "LSIJ2k.h"
00039 
00040 namespace lsi {
00041 
00048         class CDwt {
00049         public :
00050                 // == Functions.
00057                 static LSVOID LSE_CALL                                          dwt_encode( CTcd::opj_tcd_tilecomp_t * _pttTileC );
00058 
00066                 static LSVOID LSE_CALL                                          dwt_decode( CTcd::opj_tcd_tilecomp_t * _pttTileC, LSINT32 _i32NumRes );
00067 
00074                 static LSINT32 LSE_CALL                                         dwt_getgain( LSINT32 _i32Orient );
00075 
00083                 static LSDOUBLE LSE_CALL                                        dwt_getnorm( LSINT32 _i32Level, LSINT32 _i32Orient );
00084 
00091                 static LSVOID LSE_CALL                                          dwt_encode_real( CTcd::opj_tcd_tilecomp_t * _pttTileC );
00092 
00100                 static LSVOID LSE_CALL                                          dwt_decode_real( CTcd::opj_tcd_tilecomp_t * _pttTileC, LSINT32 _i32NumRes );
00101 
00108                 static LSINT32 LSE_CALL                                         dwt_getgain_real( LSINT32 _i32Orient );
00109 
00117                 static LSDOUBLE LSE_CALL                                        dwt_getnorm_real( LSINT32 _i32Level, LSINT32 _i32Orient );
00118 
00125                 static LSVOID LSE_CALL                                          dwt_calc_explicit_stepsizes( CJ2k::opj_tccp_t * _ptTccp, LSINT32 _i32Prec );
00126 
00127 
00128         protected :
00129                 // == Types.
00133                 typedef struct dwt_local {
00134                         LSINT32 *                                                               mem;
00135                         LSINT32                                                                 dn;
00136                         LSINT32                                                                 sn;
00137                         LSINT32                                                                 cas;
00138                 } dwt_t;
00139 
00143                 typedef union {
00144                         LSFLOAT                                                                 f[4];
00145                 } v4;
00146 
00150                 typedef struct v4dwt_local {
00151                         v4 *                                                                    wavelet;
00152                         LSINT32                                                                 dn;
00153                         LSINT32                                                                 sn;
00154                         LSINT32                                                                 cas;
00155                 } v4dwt_t;
00156 
00162                 typedef LSVOID (LSE_CALL *                                      DWT1DFN)( dwt_t * _pdV );
00163 
00164 
00165                 // == Members.
00169                 static const LSDOUBLE                                           dwt_norms[4][10];
00170 
00174                 static const LSDOUBLE                                           dwt_norms_real[4][10];
00175 
00179                 static const LSFLOAT                                            m_fK;
00180 
00184                 static const LSFLOAT                                            m_c13318;
00185 
00189                 static const LSFLOAT                                            m_dwt_alpha;
00190 
00194                 static const LSFLOAT                                            m_dwt_beta;
00195 
00199                 static const LSFLOAT                                            m_dwt_gamma;
00200 
00204                 static const LSFLOAT                                            m_dwt_delta;
00205 
00206 
00207                 // == Functions.
00217                 static LSVOID LSE_CALL                                          dwt_deinterleave_h( LSINT32 * _pi32A, LSINT32 * _pi32B, LSINT32 _i32Dn, LSINT32 _i32Sn, LSINT32 _i32Cas );
00218 
00229                 static LSVOID LSE_CALL                                          dwt_deinterleave_v( LSINT32 * _pi32A, LSINT32 * _pi32B, LSINT32 _i32Dn, LSINT32 _i32Sn, LSINT32 _i32X, LSINT32 _i32Cas );
00230 
00237                 static LSVOID LSE_CALL                                          dwt_interleave_h( dwt_t * _pdH, LSINT32 * _pi32A );
00238 
00246                 static LSVOID LSE_CALL                                          dwt_interleave_v( dwt_t * _pdV, LSINT32 * _pi32A, LSINT32 _i32X );
00247 
00256                 static LSVOID LSE_CALL                                          dwt_encode_1( LSINT32 * _pi32A, LSINT32 _i32Dn, LSINT32 _i32Sn, LSINT32 _i32Cas );
00257 
00263                 static LSVOID LSE_CALL                                          dwt_decode_1( dwt_t * _pdV );
00264 
00273                 static LSVOID LSE_CALL                                          dwt_encode_1_real( LSINT32 * _pi32A, LSINT32 _i32Dn, LSINT32 _i32Sn, LSINT32 _i32Cas );
00274 
00282                 static LSVOID LSE_CALL                                          dwt_encode_stepsize( LSINT32 _i32StepSize, LSINT32 _i32NumBps, CJ2k::opj_stepsize_t * _psBandNoStepSize );
00283 
00291                 static LSVOID LSE_CALL                                          dwt_decode_tile( CTcd::opj_tcd_tilecomp_t * _pttTileC, LSINT32 _i32I, DWT1DFN _dFn );
00292 
00299                 static LSINT32 LSE_CALL                                         dwt_decode_max_resolution( CTcd::opj_tcd_resolution_t * LSE_RESTRICT _ptrR, LSINT32 _i32I );
00300 
00309                 static LSVOID LSE_CALL                                          v4dwt_interleave_h( v4dwt_t * LSE_RESTRICT _pvW, LSFLOAT * LSE_RESTRICT _pfA, LSINT32 _i32X, LSINT32 _i32Size );
00310 
00318                 static LSVOID LSE_CALL                                          v4dwt_interleave_v( v4dwt_t * LSE_RESTRICT _pvV, LSFLOAT * LSE_RESTRICT _pfA, LSINT32 _i32X );
00319 
00325                 static LSVOID LSE_CALL                                          v4dwt_decode( v4dwt_t * LSE_RESTRICT _pvDwt );
00326 
00335                 static LSVOID LSE_CALL                                          dwt_decode_1_( LSINT32 * _pi32A, LSINT32 _i32Dn, LSINT32 _i32Sn, LSINT32 _i32Cas );
00336 
00344                 static LSVOID LSE_CALL                                          v4dwt_decode_step1( v4 * _pvW, LSINT32 _i32Count, const LSFLOAT _fC );
00345 
00355                 static LSVOID LSE_CALL                                          v4dwt_decode_step2( v4 * _pvL, v4 * _pvW, LSINT32 _i32K, LSINT32 _i32M, LSFLOAT _fC );
00356         };
00357 
00358 }       // namespace lsi
00359 
00360 #endif  // __LSI_DWT_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator