• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   Copyright 1999-2019 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.  You may
6   obtain a copy of the License at
7 
8     https://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   ChannelType
141     channels;
142 
143   size_t
144     columns,
145     rows;
146 
147   size_t
148     metacontent_extent,
149     number_channels;
150 
151   PixelChannelMap
152     channel_map[MaxPixelChannels];
153 
154   CacheType
155     type;
156 
157   MapMode
158     mode,
159     disk_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 
227   MagickBooleanType
228     composite_mask;
229 } CacheInfo;
230 
231 extern MagickPrivate Cache
232   AcquirePixelCache(const size_t),
233   ClonePixelCache(const Cache),
234   DestroyPixelCache(Cache),
235   ReferencePixelCache(Cache);
236 
237 extern MagickPrivate ClassType
238   GetPixelCacheStorageClass(const Cache);
239 
240 extern MagickPrivate ColorspaceType
241   GetPixelCacheColorspace(const Cache);
242 
243 extern MagickPrivate const Quantum
244   *GetVirtualPixelCacheNexus(const Image *,const VirtualPixelMethod,
245     const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
246     ExceptionInfo *) magick_hot_spot,
247   *GetVirtualPixelsNexus(const Cache,NexusInfo *magick_restrict);
248 
249 extern MagickPrivate const void
250   *GetVirtualMetacontentFromNexus(const Cache,NexusInfo *magick_restrict);
251 
252 extern MagickPrivate MagickBooleanType
253   CacheComponentGenesis(void),
254   SyncAuthenticPixelCacheNexus(Image *,NexusInfo *magick_restrict,
255     ExceptionInfo *) magick_hot_spot,
256   SyncImagePixelCache(Image *,ExceptionInfo *);
257 
258 extern MagickPrivate MagickSizeType
259   GetPixelCacheNexusExtent(const Cache,NexusInfo *magick_restrict);
260 
261 extern MagickPrivate NexusInfo
262   **AcquirePixelCacheNexus(const size_t),
263   **DestroyPixelCacheNexus(NexusInfo **,const size_t);
264 
265 extern MagickPrivate Quantum
266   *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
267     const size_t,const size_t,NexusInfo *,ExceptionInfo *) magick_hot_spot,
268   *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
269     const size_t,const size_t,const MagickBooleanType,NexusInfo *,
270     ExceptionInfo *) magick_hot_spot;
271 
272 extern MagickPrivate size_t
273   GetPixelCacheChannels(const Cache);
274 
275 extern MagickPrivate VirtualPixelMethod
276   GetPixelCacheVirtualMethod(const Image *),
277   SetPixelCacheVirtualMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
278 
279 extern MagickPrivate void
280   CacheComponentTerminus(void),
281   ClonePixelCacheMethods(Cache,const Cache),
282   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
283   GetPixelCacheMethods(CacheMethods *),
284   ResetCacheAnonymousMemory(void),
285   ResetPixelCacheEpoch(void),
286   ResetPixelCacheChannels(Image *),
287   SetPixelCacheMethods(Cache,CacheMethods *);
288 
289 #if defined(MAGICKCORE_OPENCL_SUPPORT)
290 extern MagickPrivate cl_mem
291   GetAuthenticOpenCLBuffer(const Image *,MagickCLDevice,ExceptionInfo *);
292 
293 extern MagickPrivate void
294   SyncAuthenticOpenCLBuffer(const Image *);
295 #endif
296 
297 #if defined(__cplusplus) || defined(c_plusplus)
298 }
299 #endif
300 
301 #endif
302