Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r85336 - sandbox/gil/boost/gil/extension/io2
From: dsaritz_at_[hidden]
Date: 2013-08-13 18:08:26


Author: psiha
Date: 2013-08-13 18:08:26 EDT (Tue, 13 Aug 2013)
New Revision: 85336
URL: http://svn.boost.org/trac/boost/changeset/85336

Log:
Minor refactoring and cleanup (moving the GDI+, LibJPEG and LibPNG backends toward the new architecture).

Text files modified:
   sandbox/gil/boost/gil/extension/io2/gp_image.hpp | 35 +++++++++++++++--------------
   sandbox/gil/boost/gil/extension/io2/libjpeg_image.hpp | 41 +++++++++++++++++++----------------
   sandbox/gil/boost/gil/extension/io2/libpng_image.hpp | 46 ++++++++++++++++++++--------------------
   3 files changed, 63 insertions(+), 59 deletions(-)

Modified: sandbox/gil/boost/gil/extension/io2/gp_image.hpp
==============================================================================
--- sandbox/gil/boost/gil/extension/io2/gp_image.hpp Tue Aug 13 17:39:57 2013 (r85335)
+++ sandbox/gil/boost/gil/extension/io2/gp_image.hpp 2013-08-13 18:08:26 EDT (Tue, 13 Aug 2013) (r85336)
@@ -5,9 +5,10 @@
 ///
 /// Base IO interface GDI+ implementation.
 ///
-/// Copyright (c) Domagoj Saric 2010.
+/// Copyright (c) 2010.-2013. Domagoj Saric
 ///
-/// Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+/// Use, modification and distribution is subject to the
+/// Boost Software License, Version 1.0.
 /// (See accompanying file LICENSE_1_0.txt or copy at
 /// http://www.boost.org/LICENSE_1_0.txt)
 ///
@@ -23,7 +24,7 @@
 #include "detail/gp_extern_lib_guard.hpp"
 #include "detail/windows_shared.hpp"
 #include "detail/windows_shared_istreams.hpp"
-#include "formatted_image.hpp"
+#include "backend.hpp"
 
 #include <boost/array.hpp>
 #include <boost/mpl/eval_if.hpp>
@@ -191,7 +192,7 @@
                 view.height(),
                 view.pixels().row_size(),
                 gil_to_gp_format<typename View::value_type, is_planar<View>::value>::value,
- formatted_image_base::get_raw_data( view ),
+ backend_base::get_raw_data( view ),
                 &lib_object().first
             )
         );
@@ -261,7 +262,7 @@
 class gp_image;
 
 template <>
-struct formatted_image_traits<gp_image>
+struct backend_traits<gp_image>
 {
     typedef Gdiplus::PixelFormat format_t;
 
@@ -284,8 +285,8 @@
         mpl::pair<wchar_t const *, gp_image >,
         mpl::pair<IStream , gp_image >,
         mpl::pair<FILE , detail::input_FILE_for_IStream_extender <gp_image> >,
- mpl::pair<memory_chunk_t , detail::memory_chunk_for_IStream_extender<gp_image> >
- > readers;
+ mpl::pair<memory_range_t , detail::memory_chunk_for_IStream_extender<gp_image> >
+ > native_sources;
 
     typedef mpl::map4
     <
@@ -293,7 +294,7 @@
         mpl::pair<wchar_t const *, detail::gp_writer>,
         mpl::pair<IStream , detail::gp_writer>,
         mpl::pair<FILE , detail::gp_writer>
- > writers;
+ > native_sinks;
 
     typedef mpl::vector5_c<format_tag, bmp, gif, jpeg, png, tiff> supported_image_formats;
 
@@ -329,7 +330,7 @@
             Height = view.height();
             Stride = view.pixels().row_size();
             PixelFormat = detail::gil_to_gp_format<typename View::value_type, is_planar<View>::value>::value;
- Scan0 = formatted_image_base::get_raw_data( view );
+ Scan0 = backend_base::get_raw_data( view );
             Reserved = 0;
         }
 
@@ -354,7 +355,7 @@
 class gp_image
     :
     private detail::gp_guard,
- public detail::formatted_image<gp_image>
+ public detail::backend<gp_image>
 {
 public:
     typedef detail::gp_user_guard guard;
@@ -468,7 +469,7 @@
 public: // Low-level (row, strip, tile) access
     static bool can_do_roi_access() { return true; }
 
- class sequential_row_access_state
+ class sequential_row_read_state
         :
         private detail::cumulative_result
     {
@@ -479,7 +480,7 @@
         BOOST_STATIC_CONSTANT( bool, throws_on_error = false );
 
     private:
- sequential_row_access_state( gp_image const & source_image )
+ sequential_row_read_state( gp_image const & source_image )
             :
             roi_( 0, 0, source_image.dimensions().x, 1 )
         {
@@ -495,11 +496,11 @@
         Gdiplus::BitmapData bitmapData_;
     };
 
- sequential_row_access_state begin_sequential_row_access() const { return sequential_row_access_state( *this ); }
+ sequential_row_read_state begin_sequential_row_read() const { return sequential_row_read_state( *this ); }
 
     /// \todo Kill duplication with raw_convert_to_prepared_view().
     /// (04.01.2011.) (Domagoj Saric)
- void read_row( sequential_row_access_state & state, unsigned char * const p_row_storage ) const
+ void read_row( sequential_row_read_state & state, unsigned char * const p_row_storage ) const
     {
         using namespace detail ;
         using namespace Gdiplus;
@@ -526,7 +527,7 @@
     ::Gdiplus::GpBitmap & lib_object() { return *pBitmap_; }
     ::Gdiplus::GpBitmap const & lib_object() const { return const_cast<gp_image &>( *this ).lib_object(); }
 
-private: // Private formatted_image_base interface.
+private: // Private backend_base interface.
     friend class base_t;
 
     template <class MyView, class TargetView, class Converter>
@@ -770,8 +771,8 @@
 //...mhmh...to be implemented...
 //template <class Impl, class SupportedPixelFormats, class ROI>
 //inline
-//typename formatted_image<Impl, SupportedPixelFormats, ROI>::view_t
-//view( formatted_image<Impl, SupportedPixelFormats, ROI> & img );// { return img._view; }
+//typename backend<Impl, SupportedPixelFormats, ROI>::view_t
+//view( backend<Impl, SupportedPixelFormats, ROI> & img );// { return img._view; }
 
 //------------------------------------------------------------------------------
 } // namespace detail

Modified: sandbox/gil/boost/gil/extension/io2/libjpeg_image.hpp
==============================================================================
--- sandbox/gil/boost/gil/extension/io2/libjpeg_image.hpp Tue Aug 13 17:39:57 2013 (r85335)
+++ sandbox/gil/boost/gil/extension/io2/libjpeg_image.hpp 2013-08-13 18:08:26 EDT (Tue, 13 Aug 2013) (r85336)
@@ -17,7 +17,7 @@
 #ifndef libjpeg_image_hpp__7C5F6951_A00F_4E0D_9783_488A49B1CA2B
 #define libjpeg_image_hpp__7C5F6951_A00F_4E0D_9783_488A49B1CA2B
 //------------------------------------------------------------------------------
-#include "formatted_image.hpp"
+#include "backend.hpp"
 #include "detail/io_error.hpp"
 #include "detail/libx_shared.hpp"
 #include "detail/shared.hpp"
@@ -221,7 +221,7 @@
         decompression_setup_data_t
         (
             gil_to_libjpeg_format<typename View::value_type, is_planar<View>::value>::value,
- formatted_image_base::get_raw_data( view ),
+ backend_base::get_raw_data( view ),
             offset
         ),
         height_( view.height() ),
@@ -246,6 +246,9 @@
     private libjpeg_base,
     public configure_on_write_writer
 {
+protected:
+ BOOST_STATIC_CONSTANT( bool, auto_closes_device = true );
+
 public:
     explicit libjpeg_writer( char const * const p_target_file_name )
         :
@@ -298,7 +301,7 @@
         compressor().in_color_space = view.format_;
     }
 
- void do_write( view_data_t const & view ) BOOST_GIL_CAN_THROW //...zzz...a plain throw(...) would be enough here but it chokes GCC...
+ void do_write( view_data_t const & view ) BOOST_GIL_CAN_THROW
     {
         BOOST_ASSERT( view.format_ != JCS_UNKNOWN );
 
@@ -460,7 +463,7 @@
 class libjpeg_image;
 
 template <>
-struct formatted_image_traits<libjpeg_image>
+struct backend_traits<libjpeg_image>
 {
     typedef ::J_COLOR_SPACE format_t;
     typedef detail::libjpeg_supported_pixel_formats supported_pixel_formats_t;
@@ -478,16 +481,16 @@
 
     typedef mpl::map3
             <
- mpl::pair<memory_chunk_t , detail::seekable_input_memory_range_extender<libjpeg_image> >,
+ mpl::pair<memory_range_t , detail::seekable_input_memory_range_extender<libjpeg_image> >,
                 mpl::pair<FILE , libjpeg_image >,
                 mpl::pair<char const *, detail::input_c_str_for_mmap_extender <libjpeg_image> >
- > readers;
+ > native_sources;
 
     typedef mpl::map2
             <
                 mpl::pair<FILE , detail::libjpeg_writer>,
                 mpl::pair<char const *, detail::libjpeg_writer>
- > writers;
+ > native_sinks;
 
     typedef mpl::vector1_c<format_tag, jpeg> supported_image_formats;
 
@@ -507,7 +510,7 @@
 class libjpeg_image
     :
     public detail::libjpeg_base,
- public detail::formatted_image<libjpeg_image>
+ public detail::backend<libjpeg_image>
 {
 public:
     struct guard {};
@@ -575,7 +578,7 @@
     }
 
 public: // Low-level (row, strip, tile) access
- void read_row( sequential_row_access_state, unsigned char * const p_row_storage ) const
+ void read_row( sequential_row_read_state, unsigned char * const p_row_storage ) const
     {
         read_scanline( p_row_storage );
     }
@@ -584,7 +587,7 @@
     jpeg_decompress_struct const & lib_object() const { return decompressor(); }
 
 public: /// \ingroup Construction
- explicit libjpeg_image( memory_chunk_t & memory_chunk )
+ explicit libjpeg_image( memory_range_t & memory_chunk )
         :
         libjpeg_base( for_decompressor() )
     {
@@ -612,15 +615,15 @@
         read_header();
     }
 
-private: // Private interface for the base formatted_image<> class.
+private: // Private interface for the base backend<> class.
     // Implementation note:
     // MSVC 10 accepts friend base_t and friend class base_t, Clang 2.8
     // accepts friend class base_t, Apple Clang 1.6 and GCC (4.2 and 4.6) accept
     // neither.
     // (13.01.2011.) (Domagoj Saric)
- friend class detail::formatted_image<libjpeg_image>;
+ friend class detail::backend<libjpeg_image>;
 
- void raw_convert_to_prepared_view( detail::view_data_t const & view_data ) const BOOST_GIL_CAN_THROW //...zzz...a plain throw(...) would be enough here but it chokes GCC...
+ void raw_convert_to_prepared_view( detail::view_data_t const & view_data ) const BOOST_GIL_CAN_THROW
     {
         setup_decompression( view_data );
 
@@ -721,7 +724,7 @@
     }
 
 
- static std::size_t cached_format_size( format_t const format )
+ static unsigned int cached_format_size( format_t const format )
     {
         switch ( format )
         {
@@ -742,7 +745,7 @@
     }
 
 private:
- void setup_decompression( detail::decompression_setup_data_t const & view_data ) const BOOST_GIL_CAN_THROW //...zzz...a plain throw(...) would be enough here but it chokes GCC...
+ void setup_decompression( detail::decompression_setup_data_t const & view_data ) const BOOST_GIL_CAN_THROW
     {
         unsigned int const state ( decompressor().global_state );
         unsigned int rows_to_skip( view_data.offset_ );
@@ -786,9 +789,9 @@
         mutable_this().decompressor().raw_data_out = true;
         mutable_this().decompressor().global_state = DSTATE_RAW_OK;
 
- std::size_t const max_number_of_components( 4 ); // CMYK
- std::size_t const max_sampling_factor ( 2 ); // Documentation
- std::size_t const mcu_row_size ( max_sampling_factor * DCTSIZE ); // Documentation
+ unsigned int const max_number_of_components( 4 ); // CMYK
+ unsigned int const max_sampling_factor ( 2 ); // Documentation
+ unsigned int const mcu_row_size ( max_sampling_factor * DCTSIZE ); // Documentation
         BOOST_ASSERT( decompressor().num_components <= max_number_of_components );
         BOOST_ASSERT( decompressor().max_v_samp_factor <= max_sampling_factor );
 
@@ -885,7 +888,7 @@
         decompressor().src = &source_manager_;
     }
 
- void setup_source( memory_chunk_t & memory_chunk )
+ void setup_source( memory_range_t & memory_chunk )
     {
         setup_source();
 

Modified: sandbox/gil/boost/gil/extension/io2/libpng_image.hpp
==============================================================================
--- sandbox/gil/boost/gil/extension/io2/libpng_image.hpp Tue Aug 13 17:39:57 2013 (r85335)
+++ sandbox/gil/boost/gil/extension/io2/libpng_image.hpp 2013-08-13 18:08:26 EDT (Tue, 13 Aug 2013) (r85336)
@@ -13,11 +13,11 @@
 ///
 ////////////////////////////////////////////////////////////////////////////////
 //------------------------------------------------------------------------------
-#pragma once
 #ifndef libpng_image_hpp__9E0C99E6_EAE8_4D71_844B_93518FFCB5CE
 #define libpng_image_hpp__9E0C99E6_EAE8_4D71_844B_93518FFCB5CE
+#pragma once
 //------------------------------------------------------------------------------
-#include "formatted_image.hpp"
+#include "backend.hpp"
 #include "detail/platform_specifics.hpp"
 #include "detail/io_error.hpp"
 #include "detail/libx_shared.hpp"
@@ -43,7 +43,7 @@
 //------------------------------------------------------------------------------
 
 template <typename Pixel, bool isPlanar>
-struct gil_to_libpng_format : mpl::integral_c<unsigned int, formatted_image_base::unsupported_format> {};
+struct gil_to_libpng_format : mpl::integral_c<unsigned int, backend_base::unsupported_format> {};
 
 /// \todo Add bgr-layout formats as LibPNG actually supports them through
 /// png_set_bgr().
@@ -85,7 +85,7 @@
     /*explicit*/ libpng_view_data_t( View const & view, libpng_roi::offset_t const offset = 0 )
         :
         format_( gil_to_libpng_format<typename View::value_type, is_planar<View>::value>::value ),
- buffer_( formatted_image_base::get_raw_data( view ) ),
+ buffer_( backend_base::get_raw_data( view ) ),
         offset_( offset ),
         height_( view.height() ),
         width_ ( view.width () ),
@@ -250,8 +250,6 @@
 ///
 /// \class libpng_writer
 ///
-/// \brief
-///
 ////////////////////////////////////////////////////////////////////////////////
 
 class libpng_writer
@@ -280,7 +278,7 @@
         write( view );
     }
 
- void write( libpng_view_data_t const & view ) BOOST_GIL_CAN_THROW //...zzz...a plain throw(...) would be enough here but it chokes GCC...
+ void write( libpng_view_data_t const & view ) BOOST_GIL_CAN_THROW
     {
         BOOST_ASSERT( view.format_ != JCS_UNKNOWN );
 
@@ -382,7 +380,7 @@
 class libpng_image;
 
 template <>
-struct formatted_image_traits<libpng_image>
+struct backend_traits<libpng_image>
 {
     typedef detail::libpng_supported_pixel_formats supported_pixel_formats_t;
     typedef detail::libpng_roi roi_t;
@@ -400,16 +398,16 @@
 
     typedef mpl::map3
             <
- mpl::pair<memory_chunk_t , detail::seekable_input_memory_range_extender<libpng_image> >,
+ mpl::pair<memory_range_t , detail::seekable_input_memory_range_extender<libpng_image> >,
                 mpl::pair<FILE , libpng_image >,
                 mpl::pair<char const *, detail::input_c_str_for_mmap_extender <libpng_image> >
- > readers;
+ > native_sources;
 
     typedef mpl::map2
             <
                 mpl::pair<FILE , detail::libpng_writer_FILE >,
                 mpl::pair<char const *, detail::output_c_str_for_c_file_extender<detail::libpng_writer_FILE> >
- > writers;
+ > native_sinks;
 
     typedef mpl::vector1_c<format_tag, png> supported_image_formats;
 
@@ -430,7 +428,7 @@
 
 class libpng_image
     :
- public detail::formatted_image<libpng_image>,
+ public detail::backend<libpng_image>,
     private detail::libpng_base
 {
 public:
@@ -450,8 +448,8 @@
         {
             default: return current_format;
 
- case PNG_COLOR_TYPE_PALETTE : return PNG_COLOR_TYPE_RGB | ( 8 << 16 );
- case PNG_COLOR_TYPE_GRAY_ALPHA: return PNG_COLOR_TYPE_RGBA | ( ( ( current_format >> 16 ) & 0xFF ) << 16 );
+ case PNG_COLOR_TYPE_PALETTE : return PNG_COLOR_TYPE_RGB | ( 8 << 16 ); // 8-bit RGB
+ case PNG_COLOR_TYPE_GRAY_ALPHA: return PNG_COLOR_TYPE_RGBA | ( ( ( current_format >> 16 ) & 0xFF ) << 16 ); // (bits of current_format) RGBA
         }
     }
 
@@ -498,7 +496,7 @@
         init();
     }
 
- explicit libpng_image( memory_chunk_t & in_memory_image )
+ explicit libpng_image( memory_range_t & in_memory_image )
         :
         libpng_base( ::png_create_read_struct_2( PNG_LIBPNG_VER_STRING, NULL, &detail::png_error_function, &detail::png_warning_function, NULL, NULL, NULL ) )
     {
@@ -526,20 +524,20 @@
     }
 
 public: // Low-level (row, strip, tile) access
- void read_row( sequential_row_access_state, unsigned char * const p_row_storage ) const
+ void read_row( sequential_row_read_state, unsigned char * const p_row_storage ) const
     {
         read_row( p_row_storage );
     }
 
     png_struct & lib_object() const { return png_object(); }
 
-private: // Private formatted_image_base interface.
+private: // Private backend_base interface.
     // Implementation note:
     // MSVC 10 accepts friend base_t and friend class base_t, Clang 2.8
     // accepts friend class base_t, Apple Clang 1.6 and GCC (4.2 and 4.6) accept
     // neither.
     // (13.01.2011.) (Domagoj Saric)
- friend class detail::formatted_image<libpng_image>;
+ friend class detail::backend<libpng_image>;
 
     template <class MyView, class TargetView, class Converter>
     void generic_convert_to_prepared_view( TargetView const & view, Converter const & converter ) const BOOST_GIL_CAN_THROW //...zzz...a plain throw(...) would be enough here but it chokes GCC...
@@ -598,8 +596,13 @@
             ::png_set_palette_to_rgb( &png_object() );
         }
         else
- if ( colour_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8 )
+ if ( ( colour_type == PNG_COLOR_TYPE_GRAY ) && ( bit_depth < 8 ) )
+ {
             ::png_set_expand_gray_1_2_4_to_8( &png_object() );
+ }
+
+ if ( !( colour_type & PNG_COLOR_MASK_ALPHA ) )
+ ::png_set_strip_alpha( &png_object() );
 
         if ( ::png_get_valid( &png_object(), &info_object(), PNG_INFO_tRNS ) )
             ::png_set_tRNS_to_alpha( &png_object() );
@@ -607,9 +610,6 @@
         if ( bit_depth == 8 )
             ::png_set_strip_16( &png_object() );
 
- if ( !( colour_type & PNG_COLOR_MASK_ALPHA ) )
- ::png_set_strip_alpha( &png_object() );
-
         //...zzz...
 
         //if (color_type == PNG_COLOR_TYPE_RGB ||
@@ -738,7 +738,7 @@
         BOOST_ASSERT( png_ptr );
         BOOST_ASSERT( png_ptr->io_ptr );
 
- memory_chunk_t & memory_chunk( *static_cast<memory_chunk_t *>( png_ptr->io_ptr ) );
+ memory_range_t & memory_chunk( *static_cast<memory_range_t *>( png_ptr->io_ptr ) );
 
         if ( length <= static_cast<std::size_t>( memory_chunk.size() ) )
         {


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk