"L. Spiro Engine"
|
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__