[Hdrflow-svn] SF.net SVN: hdrflow: [363] trunk/lib/openlibraries/src/openimagelib/il
Status: Pre-Alpha
Brought to you by:
glslang
From: <gl...@us...> - 2007-10-23 21:21:50
|
Revision: 363 http://hdrflow.svn.sourceforge.net/hdrflow/?rev=363&view=rev Author: glslang Date: 2007-10-23 14:21:48 -0700 (Tue, 23 Oct 2007) Log Message: ----------- + continuation of conversion refactoring for generic swizzle and lut support Modified Paths: -------------- trunk/lib/openlibraries/src/openimagelib/il/il.hpp trunk/lib/openlibraries/src/openimagelib/il/lut_converter.hpp trunk/lib/openlibraries/src/openimagelib/il/utility.cpp Modified: trunk/lib/openlibraries/src/openimagelib/il/il.hpp =================================================================== --- trunk/lib/openlibraries/src/openimagelib/il/il.hpp 2007-10-20 20:35:32 UTC (rev 362) +++ trunk/lib/openlibraries/src/openimagelib/il/il.hpp 2007-10-23 21:21:48 UTC (rev 363) @@ -14,7 +14,6 @@ #include <openimagelib/il/basic_image.hpp> #include <openimagelib/il/traits.hpp> #include <openimagelib/il/utility.hpp> -#include <openimagelib/il/lut_converter.hpp> namespace olib { namespace openimagelib { Modified: trunk/lib/openlibraries/src/openimagelib/il/lut_converter.hpp =================================================================== --- trunk/lib/openlibraries/src/openimagelib/il/lut_converter.hpp 2007-10-20 20:35:32 UTC (rev 362) +++ trunk/lib/openlibraries/src/openimagelib/il/lut_converter.hpp 2007-10-23 21:21:48 UTC (rev 363) @@ -10,35 +10,35 @@ #include <functional> +#include <openpluginlib/pl/fast_math.hpp> + namespace olib { namespace openimagelib { namespace il { struct byte_to_byte : public std::unary_function<unsigned char, unsigned char> { - typedef unsigned char value_type; - typedef unsigned char convert_type; - - convert_type operator( )( value_type v ) const + result_type operator( )( argument_type v ) const { return v; } }; struct byte_to_float : public std::unary_function<unsigned char, float> { - typedef unsigned char value_type; - typedef float convert_type; - - convert_type operator( )( value_type v ) const + result_type operator( )( argument_type v ) const { return v / 255.0f; } }; struct float_to_float : public std::unary_function<float, float> { - typedef float value_type; - typedef float convert_type; - - convert_type operator( )( value_type v ) const + result_type operator( )( argument_type v ) const { return v; } }; +// Assumes normalise( im, 255.0f ) has already been called. +struct float_to_byte : public std::unary_function<float, unsigned char> +{ + result_type operator( )( argument_type v ) const + { return static_cast<result_type>( openpluginlib::fast_floorf( v ) ); } +}; + } } } #endif Modified: trunk/lib/openlibraries/src/openimagelib/il/utility.cpp =================================================================== --- trunk/lib/openlibraries/src/openimagelib/il/utility.cpp 2007-10-20 20:35:32 UTC (rev 362) +++ trunk/lib/openlibraries/src/openimagelib/il/utility.cpp 2007-10-23 21:21:48 UTC (rev 363) @@ -14,6 +14,7 @@ #include <openpluginlib/pl/fast_math.hpp> #include <openpluginlib/pl/utf8_utils.hpp> #include <openimagelib/il/il.hpp> +#include <openimagelib/il/lut_converter.hpp> namespace opl = olib::openpluginlib; @@ -1112,7 +1113,7 @@ { L"", L"", 0, { 0, 0, 0, 0 }, 0, { 0, 0, 0, 0 } } }; -template<typename const_pointer, typename pointer> +template<typename const_pointer, typename pointer, class LUT> image_type_ptr rgb_to_rgb( const image_type_ptr &src_img, const std::wstring &format ) { size_type width = src_img->width( ); @@ -1122,6 +1123,8 @@ if ( dst_img != 0 ) { + LUT lut; + const_pointer src = src_img->data( ); size_type src_pitch = src_img->pitch( ); pointer dst = dst_img->data( ); @@ -1152,10 +1155,10 @@ { switch( oc ) { - case 4: *( dst + map.out[ 3 ] ) = has_alpha ? *( src + map.in[ 3 ] ) : 255; - case 3: *( dst + map.out[ 2 ] ) = *( src + map.in[ 2 ] ); - case 2: *( dst + map.out[ 1 ] ) = *( src + map.in[ 1 ] ); - case 1: *( dst + map.out[ 0 ] ) = *( src + map.in[ 0 ] ); + case 4: *( dst + map.out[ 3 ] ) = has_alpha ? lut( *( src + map.in[ 3 ] ) ) : 255; + case 3: *( dst + map.out[ 2 ] ) = lut( *( src + map.in[ 2 ] ) ); + case 2: *( dst + map.out[ 1 ] ) = lut( *( src + map.in[ 1 ] ) ); + case 1: *( dst + map.out[ 0 ] ) = lut( *( src + map.in[ 0 ] ) ); }; src += ic; @@ -1803,11 +1806,11 @@ else if ( src_pf == L"r8g8b8" ) { if ( dst_pf == L"b8g8r8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"r8g8b8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"b8g8r8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"yuv444" ) return rgb_to_yuv444( src, dst_pf, 3, 0, 1, 2 ); else if ( dst_pf == L"yuv422" ) @@ -1823,11 +1826,11 @@ else if ( src_pf == L"b8g8r8" ) { if ( dst_pf == L"r8g8b8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"r8g8b8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"b8g8r8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"yuv444" ) return rgb_to_yuv444( src, dst_pf, 3, 2, 1, 0 ); else if ( dst_pf == L"yuv422" ) @@ -1838,11 +1841,11 @@ else if ( src_pf == L"r8g8b8a8" ) { if ( dst_pf == L"r8g8b8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"b8g8r8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"b8g8r8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"yuv444" ) return rgb_to_yuv444( src, dst_pf, 4, 0, 1, 2 ); else if ( dst_pf == L"yuv422" ) @@ -1858,11 +1861,11 @@ else if ( src_pf == L"b8g8r8a8" ) { if ( dst_pf == L"r8g8b8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"r8g8b8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"b8g8r8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"yuv444" ) return rgb_to_yuv444( src, dst_pf, 4, 2, 1, 0 ); else if ( dst_pf == L"yuv422" ) @@ -1875,11 +1878,11 @@ else if ( src_pf == L"a8r8g8b8" ) { if( dst_pf == L"a8b8g8r8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if( dst_pf == L"b8g8r8") - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if( dst_pf == L"b8g8r8a8") - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"yuv444" ) return rgb_to_yuv444( src, dst_pf, 4, 1, 2, 3 ); else if ( dst_pf == L"yuv422" ) @@ -1890,11 +1893,11 @@ else if( src_pf == L"a8b8g8r8" ) { if( dst_pf == L"b8g8r8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if( dst_pf == L"r8g8b8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if( dst_pf == L"r8g8b8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if ( dst_pf == L"yuv444" ) return rgb_to_yuv444( src, dst_pf, 4, 3, 2, 1 ); else if ( dst_pf == L"yuv422" ) @@ -1905,12 +1908,12 @@ else if( src_pf == L"r8g8b8log" ) { if( dst_pf == L"b8g8r8a8" ) - return convert_log_to_linear( rgb_to_rgb<const_pointer, pointer>( src, dst_pf ) ); + return convert_log_to_linear( rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ) ); } else if( src_pf == L"r8g8b8a8log" ) { if( dst_pf == L"b8g8r8a8" ) - return convert_log_to_linear( rgb_to_rgb<const_pointer, pointer>( src, dst_pf ) ); + return convert_log_to_linear( rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ) ); } else if( src_pf == L"r10g10b10" ) { @@ -2058,11 +2061,11 @@ else if( src_pf == L"l8a8" ) { if( dst_pf == L"b8g8r8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if( dst_pf == L"b8g8r8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); else if( dst_pf == L"r8g8b8a8" ) - return rgb_to_rgb<const_pointer, pointer>( src, dst_pf ); + return rgb_to_rgb<const_pointer, pointer, byte_to_byte>( src, dst_pf ); } else if( src_pf == L"l8a8p" ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |