"L. Spiro Engine"

F:/My Projects/LSEngine/Modules/LSImageLib/Src/Jpeg/LSIJpegInt.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_JPEGINT_H__
00034 #define __LSI_JPEGINT_H__
00035 
00036 #include "../LSIImageLib.h"
00037 
00038 namespace lsi {
00039 
00046         class CJpegInt {
00047         public :
00048                 // == Functions.
00054                 static LSE_INLINE LSINT32 LSE_FCALL                             int_min( LSINT32 _i32A, LSINT32 _i32B );
00055 
00061                 static LSE_INLINE LSINT32 LSE_FCALL                             int_max( LSINT32 _i32A, LSINT32 _i32B );
00062 
00073                 static LSE_INLINE LSINT32 LSE_FCALL                             int_clamp( LSINT32 _i32A, LSINT32 _i32Min, LSINT32 _i32Max );
00074 
00080                 static LSE_INLINE LSINT32 LSE_FCALL                             int_abs( LSINT32 _i32A );
00081 
00087                 static LSE_INLINE LSINT32 LSE_FCALL                             int_ceildiv( LSINT32 _i32A, LSINT32 _i32B );
00088 
00094                 static LSE_INLINE LSINT32 LSE_FCALL                             int_ceildivpow2( LSINT32 _i32A, LSINT32 _i32B );
00095 
00101                 static LSE_INLINE LSINT32 LSE_FCALL                             int_floordivpow2( LSINT32 _i32A, LSINT32 _i32B );
00102 
00108                 static LSE_INLINE LSINT32 LSE_FCALL                             int_floorlog2( LSINT32 _i32A );
00109 
00110         };
00111 
00112 
00113         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00114         // DEFINITIONS
00115         // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00116         // == Functions.
00122         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_min( LSINT32 _i32A, LSINT32 _i32B ) {
00123                 return _i32A < _i32B ? _i32A : _i32B;
00124         }
00125 
00131         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_max( LSINT32 _i32A, LSINT32 _i32B ) {
00132                 return (_i32A > _i32B) ? _i32A : _i32B;
00133         }
00134 
00145         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_clamp( LSINT32 _i32A, LSINT32 _i32Min, LSINT32 _i32Max ) {
00146                 if ( _i32A < _i32Min ) { return _i32Min; }
00147                 if ( _i32A > _i32Max ) { return _i32Max; }
00148                 return _i32A;
00149         }
00150 
00156         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_abs( LSINT32 _i32A ) {
00157                 return _i32A < 0 ? -_i32A : _i32A;
00158         }
00159 
00165         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_ceildiv( LSINT32 _i32A, LSINT32 _i32B ) {
00166                 return (_i32A + _i32B - 1) / _i32B;
00167         }
00168 
00174         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_ceildivpow2( LSINT32 _i32A, LSINT32 _i32B ) {
00175                 return (_i32A + (1L << _i32B) - 1) >> _i32B;
00176         }
00177 
00183         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_floordivpow2( LSINT32 _i32A, LSINT32 _i32B ) {
00184                 return _i32A >> _i32B;
00185         }
00186 
00192         LSE_INLINE LSINT32 LSE_FCALL CJpegInt::int_floorlog2( LSINT32 _i32A ) {
00193                 LSINT32 i32L;
00194                 for ( i32L = 0; _i32A > 1; i32L++ ) {
00195                         _i32A >>= 1;
00196                 }
00197                 return i32L;
00198         }
00199 
00200 }       // namespace lsi
00201 
00202 #endif  // __LSI_JPEGINT_H__
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator