| /* VIPS display class. |
| * |
| * Hide details of im_col_display API. |
| */ |
| |
| /* |
| |
| This file is part of VIPS. |
| |
| VIPS is free software; you can redistribute it and/or modify |
| it under the terms of the GNU Lesser General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| |
| */ |
| |
| /* |
| |
| These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk |
| |
| */ |
| |
| #ifndef IM_VDISPLAY_H |
| #define IM_VDISPLAY_H |
| |
| /* SWIG includes this file directly rather than going through vipscpp.h ... so |
| * we have to define these macros here as well. |
| */ |
| #ifdef SWIG |
| #define VIPS_NAMESPACE_START namespace vips { |
| #define VIPS_NAMESPACE_END } |
| #endif /*SWIG*/ |
| |
| /* Wrap pointers to these, but we don't want to import all the old C API. Just |
| * declare them. |
| */ |
| extern "C" { |
| struct im_col_display; |
| struct im_col_tab_disp; |
| } |
| |
| VIPS_NAMESPACE_START |
| |
| // Wrapper over im_col_display with ref counting |
| class VDisplay { |
| struct refblock { |
| im_col_display *disp; // im_col_display struct |
| im_col_tab_disp *luts; // luts built from this display |
| int priv; // disp is ours, or system |
| int nrefs; // Refs to us |
| |
| // Invalidate lut |
| void cleanlut(); |
| |
| // Break attached stuff |
| void cleanref(); |
| |
| // Get ready to write |
| void wready(); |
| |
| // Check that luts are up-to-date |
| void cluts(); |
| |
| refblock() : disp(0), luts(0), priv(0), nrefs(1) {} |
| ~refblock() { cleanref(); } |
| }; |
| |
| refblock *ref; |
| |
| public: |
| enum VDisplayType { |
| BARCO, // Does many corrections for us |
| DUMB // Needs many corrections |
| }; |
| |
| // Get named display |
| VDisplay( const char *name ); |
| |
| // Get default display |
| VDisplay(); |
| |
| // Copy constructor |
| VDisplay( const VDisplay &a ) { ref = a.ref; ref->nrefs++; } |
| |
| // Assignment |
| VDisplay &operator=( const VDisplay &a ); |
| |
| // Destructor |
| virtual ~VDisplay(); |
| |
| // The matrix type we use |
| typedef float matrix[3][3]; |
| |
| // Extract display pointer |
| void *disp() const { return( ref->disp ); } |
| |
| // Extract luts pointer, rebuilding luts if necessary |
| im_col_tab_disp *luts() const |
| { ref->cluts(); return( ref->luts ); } |
| }; |
| |
| VIPS_NAMESPACE_END |
| |
| #endif /*IM_VDISPLAY_H*/ |