Home | History | Annotate | Download | only in MagickCore
      1 /*
      2   Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization
      3   dedicated to making software imaging solutions freely available.
      4 
      5   You may not use this file except in compliance with the License.
      6   obtain a copy of the License at
      7 
      8     http://www.imagemagick.org/script/license.php
      9 
     10   Unless required by applicable law or agreed to in writing, software
     11   distributed under the License is distributed on an "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13   See the License for the specific language governing permissions and
     14   limitations under the License.
     15 
     16   MagickCore cache private methods.
     17 */
     18 #ifndef MAGICKCORE_CACHE_PRIVATE_H
     19 #define MAGICKCORE_CACHE_PRIVATE_H
     20 
     21 #include "MagickCore/cache.h"
     22 #include "MagickCore/distribute-cache.h"
     23 #include "MagickCore/opencl-private.h"
     24 #include "MagickCore/pixel.h"
     25 #include "MagickCore/random_.h"
     26 #include "MagickCore/thread-private.h"
     27 #include "MagickCore/semaphore.h"
     28 
     29 #if defined(__cplusplus) || defined(c_plusplus)
     30 extern "C" {
     31 #endif
     32 
     33 typedef void
     34   *Cache;
     35 
     36 typedef MagickBooleanType
     37   (*GetOneAuthenticPixelFromHandler)(Image *,const ssize_t,const ssize_t,
     38     Quantum *,ExceptionInfo *),
     39   (*GetOneVirtualPixelFromHandler)(const Image *,const VirtualPixelMethod,
     40     const ssize_t,const ssize_t,Quantum *,ExceptionInfo *),
     41   (*SyncAuthenticPixelsHandler)(Image *,ExceptionInfo *);
     42 
     43 typedef const Quantum
     44   *(*GetVirtualPixelHandler)(const Image *,const VirtualPixelMethod,
     45     const ssize_t,const ssize_t,const size_t,const size_t,ExceptionInfo *),
     46   *(*GetVirtualPixelsHandler)(const Image *);
     47 
     48 typedef const void
     49   *(*GetVirtualMetacontentFromHandler)(const Image *);
     50 
     51 typedef Quantum
     52   *(*GetAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
     53     const size_t,const size_t,ExceptionInfo *);
     54 
     55 typedef Quantum
     56   *(*GetAuthenticPixelsFromHandler)(const Image *);
     57 
     58 typedef Quantum
     59   *(*QueueAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
     60     const size_t,const size_t,ExceptionInfo *);
     61 
     62 typedef void
     63   (*DestroyPixelHandler)(Image *);
     64 
     65 typedef void
     66   *(*GetAuthenticMetacontentFromHandler)(const Image *);
     67 
     68 typedef struct _CacheMethods
     69 {
     70   GetVirtualPixelHandler
     71     get_virtual_pixel_handler;
     72 
     73   GetVirtualPixelsHandler
     74     get_virtual_pixels_handler;
     75 
     76   GetVirtualMetacontentFromHandler
     77     get_virtual_metacontent_from_handler;
     78 
     79   GetOneVirtualPixelFromHandler
     80     get_one_virtual_pixel_from_handler;
     81 
     82   GetAuthenticPixelsHandler
     83     get_authentic_pixels_handler;
     84 
     85   GetAuthenticMetacontentFromHandler
     86     get_authentic_metacontent_from_handler;
     87 
     88   GetOneAuthenticPixelFromHandler
     89     get_one_authentic_pixel_from_handler;
     90 
     91   GetAuthenticPixelsFromHandler
     92     get_authentic_pixels_from_handler;
     93 
     94   QueueAuthenticPixelsHandler
     95     queue_authentic_pixels_handler;
     96 
     97   SyncAuthenticPixelsHandler
     98     sync_authentic_pixels_handler;
     99 
    100   DestroyPixelHandler
    101     destroy_pixel_handler;
    102 } CacheMethods;
    103 
    104 typedef struct _NexusInfo
    105 {
    106   MagickBooleanType
    107     mapped;
    108 
    109   RectangleInfo
    110     region;
    111 
    112   MagickSizeType
    113     length;
    114 
    115   Quantum
    116     *cache,
    117     *pixels;
    118 
    119   MagickBooleanType
    120     authentic_pixel_cache;
    121 
    122   void
    123     *metacontent;
    124 
    125   size_t
    126     signature;
    127 } NexusInfo;
    128 
    129 typedef struct _CacheInfo
    130 {
    131   ClassType
    132     storage_class;
    133 
    134   ColorspaceType
    135     colorspace;
    136 
    137   PixelTrait
    138     alpha_trait;
    139 
    140   MagickBooleanType
    141     read_mask,
    142     write_mask;
    143 
    144   size_t
    145     columns,
    146     rows;
    147 
    148   size_t
    149     metacontent_extent,
    150     number_channels;
    151 
    152   PixelChannelMap
    153     channel_map[MaxPixelChannels];
    154 
    155   CacheType
    156     type;
    157 
    158   MapMode
    159     mode;
    160 
    161   MagickBooleanType
    162     mapped;
    163 
    164   MagickOffsetType
    165     offset;
    166 
    167   MagickSizeType
    168     length;
    169 
    170   VirtualPixelMethod
    171     virtual_pixel_method;
    172 
    173   PixelInfo
    174     virtual_pixel_color;
    175 
    176   size_t
    177     number_threads;
    178 
    179   NexusInfo
    180     **nexus_info;
    181 
    182   Quantum
    183     *pixels;
    184 
    185   void
    186     *metacontent;
    187 
    188   int
    189     file;
    190 
    191   char
    192     filename[MagickPathExtent],
    193     cache_filename[MagickPathExtent];
    194 
    195   CacheMethods
    196     methods;
    197 
    198   RandomInfo
    199     *random_info;
    200 
    201   void
    202     *server_info;
    203 
    204   MagickBooleanType
    205     synchronize,
    206     debug;
    207 
    208   MagickThreadType
    209     id;
    210 
    211   ssize_t
    212     reference_count;
    213 
    214   SemaphoreInfo
    215     *semaphore,
    216     *file_semaphore;
    217 
    218   time_t
    219     timestamp;
    220 
    221   size_t
    222     signature;
    223 
    224   MagickCLCacheInfo
    225     opencl;
    226 } CacheInfo;
    227 
    228 extern MagickPrivate Cache
    229   AcquirePixelCache(const size_t),
    230   ClonePixelCache(const Cache),
    231   DestroyPixelCache(Cache),
    232   ReferencePixelCache(Cache);
    233 
    234 extern MagickPrivate ClassType
    235   GetPixelCacheStorageClass(const Cache);
    236 
    237 extern MagickPrivate ColorspaceType
    238   GetPixelCacheColorspace(const Cache);
    239 
    240 extern MagickPrivate const Quantum
    241   *GetVirtualPixelsFromNexus(const Image *,const VirtualPixelMethod,
    242     const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
    243     ExceptionInfo *) magick_hot_spot,
    244   *GetVirtualPixelsNexus(const Cache,NexusInfo *magick_restrict);
    245 
    246 extern MagickPrivate const void
    247   *AcquirePixelCachePixels(const Image *,MagickSizeType *,ExceptionInfo *),
    248   *GetVirtualMetacontentFromNexus(const Cache,NexusInfo *magick_restrict);
    249 
    250 extern MagickPrivate MagickBooleanType
    251   CacheComponentGenesis(void),
    252   SyncAuthenticPixelCacheNexus(Image *,NexusInfo *magick_restrict,
    253     ExceptionInfo *) magick_hot_spot,
    254   SyncImagePixelCache(Image *,ExceptionInfo *);
    255 
    256 extern MagickPrivate MagickSizeType
    257   GetPixelCacheNexusExtent(const Cache,NexusInfo *magick_restrict);
    258 
    259 extern MagickPrivate NexusInfo
    260   **AcquirePixelCacheNexus(const size_t),
    261   **DestroyPixelCacheNexus(NexusInfo **,const size_t);
    262 
    263 extern MagickPrivate Quantum
    264   *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
    265     const size_t,const size_t,NexusInfo *,ExceptionInfo *) magick_hot_spot,
    266   *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
    267     const size_t,const size_t,const MagickBooleanType,NexusInfo *,
    268     ExceptionInfo *) magick_hot_spot;
    269 
    270 extern MagickPrivate size_t
    271   GetPixelCacheChannels(const Cache);
    272 
    273 extern MagickPrivate VirtualPixelMethod
    274   GetPixelCacheVirtualMethod(const Image *),
    275   SetPixelCacheVirtualMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
    276 
    277 extern MagickPrivate void
    278   CacheComponentTerminus(void),
    279   ClonePixelCacheMethods(Cache,const Cache),
    280   *GetPixelCachePixels(Image *,MagickSizeType *,ExceptionInfo *),
    281   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
    282   GetPixelCacheMethods(CacheMethods *),
    283   ResetPixelCacheEpoch(void),
    284   SetPixelCacheMethods(Cache,CacheMethods *);
    285 
    286 #if defined(MAGICKCORE_OPENCL_SUPPORT)
    287 extern MagickPrivate cl_mem
    288   GetAuthenticOpenCLBuffer(const Image *,MagickCLDevice,ExceptionInfo *);
    289 
    290 extern MagickPrivate void
    291   SyncAuthenticOpenCLBuffer(const Image *);
    292 #endif
    293 
    294 #if defined(__cplusplus) || defined(c_plusplus)
    295 }
    296 #endif
    297 
    298 #endif
    299