• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   Copyright 1999-2021 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 
128   struct _NexusInfo
129     *virtual_nexus;
130 } NexusInfo;
131 
132 typedef struct _CacheInfo
133 {
134   ClassType
135     storage_class;
136 
137   ColorspaceType
138     colorspace;
139 
140   PixelTrait
141     alpha_trait;
142 
143   ChannelType
144     channels;
145 
146   size_t
147     columns,
148     rows;
149 
150   size_t
151     metacontent_extent,
152     number_channels;
153 
154   PixelChannelMap
155     channel_map[MaxPixelChannels];
156 
157   CacheType
158     type;
159 
160   MapMode
161     mode,
162     disk_mode;
163 
164   MagickBooleanType
165     mapped;
166 
167   MagickOffsetType
168     offset;
169 
170   MagickSizeType
171     length;
172 
173   VirtualPixelMethod
174     virtual_pixel_method;
175 
176   PixelInfo
177     virtual_pixel_color;
178 
179   size_t
180     number_threads;
181 
182   NexusInfo
183     **nexus_info;
184 
185   Quantum
186     *pixels;
187 
188   void
189     *metacontent;
190 
191   int
192     file;
193 
194   char
195     filename[MagickPathExtent],
196     cache_filename[MagickPathExtent];
197 
198   CacheMethods
199     methods;
200 
201   RandomInfo
202     *random_info;
203 
204   void
205     *server_info;
206 
207   MagickBooleanType
208     synchronize,
209     debug;
210 
211   MagickThreadType
212     id;
213 
214   ssize_t
215     reference_count;
216 
217   SemaphoreInfo
218     *semaphore,
219     *file_semaphore;
220 
221   time_t
222     timestamp;
223 
224   size_t
225     signature;
226 
227   MagickCLCacheInfo
228     opencl;
229 
230   MagickBooleanType
231     composite_mask;
232 
233   MagickSizeType
234     width_limit,
235     height_limit;
236 } CacheInfo;
237 
238 extern MagickPrivate Cache
239   AcquirePixelCache(const size_t),
240   ClonePixelCache(const Cache),
241   DestroyPixelCache(Cache),
242   ReferencePixelCache(Cache);
243 
244 extern MagickPrivate ClassType
245   GetPixelCacheStorageClass(const Cache);
246 
247 extern MagickPrivate ColorspaceType
248   GetPixelCacheColorspace(const Cache);
249 
250 extern MagickPrivate const Quantum
251   *GetVirtualPixelCacheNexus(const Image *,const VirtualPixelMethod,
252     const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
253     ExceptionInfo *) magick_hot_spot,
254   *GetVirtualPixelsNexus(const Cache,NexusInfo *magick_restrict);
255 
256 extern MagickPrivate const void
257   *GetVirtualMetacontentFromNexus(const Cache,NexusInfo *magick_restrict);
258 
259 extern MagickPrivate MagickBooleanType
260   CacheComponentGenesis(void),
261   SyncAuthenticPixelCacheNexus(Image *,NexusInfo *magick_restrict,
262     ExceptionInfo *) magick_hot_spot,
263   SyncImagePixelCache(Image *,ExceptionInfo *);
264 
265 extern MagickPrivate MagickSizeType
266   GetPixelCacheNexusExtent(const Cache,NexusInfo *magick_restrict);
267 
268 extern MagickPrivate NexusInfo
269   **AcquirePixelCacheNexus(const size_t),
270   **DestroyPixelCacheNexus(NexusInfo **,const size_t);
271 
272 extern MagickPrivate Quantum
273   *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
274     const size_t,const size_t,NexusInfo *,ExceptionInfo *) magick_hot_spot,
275   *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
276     const size_t,const size_t,const MagickBooleanType,NexusInfo *,
277     ExceptionInfo *) magick_hot_spot;
278 
279 extern MagickPrivate size_t
280   GetPixelCacheChannels(const Cache);
281 
282 extern MagickPrivate VirtualPixelMethod
283   GetPixelCacheVirtualMethod(const Image *),
284   SetPixelCacheVirtualMethod(Image *,const VirtualPixelMethod,ExceptionInfo *);
285 
286 extern MagickPrivate void
287   CacheComponentTerminus(void),
288   ClonePixelCacheMethods(Cache,const Cache),
289   GetPixelCacheTileSize(const Image *,size_t *,size_t *),
290   GetPixelCacheMethods(CacheMethods *),
291   ResetCacheAnonymousMemory(void),
292   ResetPixelCacheEpoch(void),
293   ResetPixelCacheChannels(Image *),
294   SetPixelCacheMethods(Cache,CacheMethods *);
295 
296 #if defined(MAGICKCORE_OPENCL_SUPPORT)
297 extern MagickPrivate cl_mem
298   GetAuthenticOpenCLBuffer(const Image *,MagickCLDevice,ExceptionInfo *);
299 
300 extern MagickPrivate void
301   SyncAuthenticOpenCLBuffer(const Image *);
302 #endif
303 
304 #if defined(__cplusplus) || defined(c_plusplus)
305 }
306 #endif
307 
308 #endif
309