MagickCore 6.9.13
Loading...
Searching...
No Matches
cache-private.h
1/*
2 Copyright 1999 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 <time.h>
22#include "magick/cache.h"
23#include "magick/distribute-cache.h"
24#include "magick/opencl-private.h"
25#include "magick/random_.h"
26#include "magick/thread-private.h"
27#include "magick/semaphore.h"
28
29#if defined(__cplusplus) || defined(c_plusplus)
30extern "C" {
31#endif
32
33typedef void
34 *Cache;
35
36typedef const IndexPacket
37 *(*GetVirtualIndexesFromHandler)(const Image *);
38
39typedef IndexPacket
40 *(*GetAuthenticIndexesFromHandler)(const Image *);
41
42typedef MagickBooleanType
43 (*GetOneAuthenticPixelFromHandler)(Image *,const ssize_t,const ssize_t,
45 (*GetOneVirtualPixelFromHandler)(const Image *,const VirtualPixelMethod,
46 const ssize_t,const ssize_t,PixelPacket *,ExceptionInfo *),
47 (*SyncAuthenticPixelsHandler)(Image *,ExceptionInfo *);
48
49typedef const PixelPacket
50 *(*GetVirtualPixelHandler)(const Image *,const VirtualPixelMethod,
51 const ssize_t,const ssize_t,const size_t,const size_t,ExceptionInfo *),
52 *(*GetVirtualPixelsHandler)(const Image *);
53
54typedef PixelPacket
55 *(*GetAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
56 const size_t,const size_t,ExceptionInfo *);
57
58typedef PixelPacket
59 *(*GetAuthenticPixelsFromHandler)(const Image *);
60
61typedef PixelPacket
62 *(*QueueAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
63 const size_t,const size_t,ExceptionInfo *);
64
65typedef void
66 (*DestroyPixelHandler)(Image *);
67
68typedef struct _CacheMethods
69{
70 GetVirtualPixelHandler
71 get_virtual_pixel_handler;
72
73 GetVirtualPixelsHandler
74 get_virtual_pixels_handler;
75
76 GetVirtualIndexesFromHandler
77 get_virtual_indexes_from_handler;
78
79 GetOneVirtualPixelFromHandler
80 get_one_virtual_pixel_from_handler;
81
82 GetAuthenticPixelsHandler
83 get_authentic_pixels_handler;
84
85 GetAuthenticIndexesFromHandler
86 get_authentic_indexes_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;
103
104typedef struct _NexusInfo
105{
106 MagickBooleanType
107 mapped;
108
110 region;
111
112 MagickSizeType
113 length;
114
116 *cache,
117 *pixels;
118
119 MagickBooleanType
120 authentic_pixel_cache;
121
122 IndexPacket
123 *indexes;
124
125 size_t
126 signature;
127
128 struct _NexusInfo
129 *virtual_nexus;
130} NexusInfo;
131
132typedef struct _OpenCLCacheInfo
133{
134 cl_event
135 *events;
136
137 cl_mem
138 buffer;
139
140 cl_uint
141 event_count;
142
143 MagickSizeType
144 length;
145
147 *pixels;
148
150 *events_semaphore;
152
153typedef struct _CacheInfo
154{
155 ClassType
156 storage_class;
157
158 ColorspaceType
159 colorspace;
160
161 size_t
162 channels;
163
164 CacheType
165 type;
166
167 MapMode
168 mode,
169 disk_mode;
170
171 MagickBooleanType
172 mapped;
173
174 size_t
175 columns,
176 rows;
177
178 MagickOffsetType
179 offset;
180
181 MagickSizeType
182 length;
183
184 VirtualPixelMethod
185 virtual_pixel_method;
186
188 virtual_pixel_color;
189
190 size_t
191 number_threads;
192
194 **nexus_info;
195
197 *pixels;
198
199 IndexPacket
200 *indexes;
201
202 MagickBooleanType
203 active_index_channel;
204
205 int
206 file;
207
208 char
209 filename[MaxTextExtent],
210 cache_filename[MaxTextExtent];
211
213 methods;
214
216 *random_info;
217
218 size_t
219 number_connections;
220
221 void
222 *server_info;
223
224 MagickBooleanType
225 synchronize,
226 debug;
227
228 MagickThreadType
229 id;
230
231 ssize_t
232 reference_count;
233
235 *semaphore,
236 *file_semaphore;
237
238 time_t
239 timestamp;
240
241 size_t
242 signature;
243
245 *opencl;
246
247 MagickSizeType
248 width_limit,
249 height_limit;
250} CacheInfo;
251
252static inline MagickBooleanType IsValidPixelOffset(const ssize_t x,
253 const size_t extent)
254{
255 if (extent == 0)
256 return(MagickTrue);
257 if ((x >= (ssize_t) (MAGICK_SSIZE_MAX/(ssize_t) extent)) ||
258 (x <= (ssize_t) (MAGICK_SSIZE_MIN/(ssize_t) extent)))
259 return(MagickFalse);
260 return(MagickTrue);
261}
262
263extern MagickExport Cache
264 AcquirePixelCache(const size_t),
265 ClonePixelCache(const Cache),
266 DestroyPixelCache(Cache),
267 ReferencePixelCache(Cache);
268
269extern MagickExport CacheType
270 GetPixelCacheType(const Image *);
271
272extern MagickExport ClassType
273 GetPixelCacheStorageClass(const Cache);
274
275extern MagickExport ColorspaceType
276 GetPixelCacheColorspace(const Cache);
277
278extern MagickExport const IndexPacket
279 *GetVirtualIndexesFromNexus(const Cache,NexusInfo *);
280
281extern MagickExport const PixelPacket
282 *GetVirtualPixelCacheNexus(const Image *,const VirtualPixelMethod,
283 const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
284 ExceptionInfo *) magick_hot_spot,
285 *GetVirtualPixelsNexus(const Cache,NexusInfo *);
286
287extern MagickExport MagickBooleanType
288 SyncAuthenticPixelCacheNexus(Image *,NexusInfo *magick_restrict,
289 ExceptionInfo *) magick_hot_spot;
290
291extern MagickExport MagickSizeType
292 GetPixelCacheNexusExtent(const Cache,NexusInfo *);
293
294extern MagickExport NexusInfo
295 **AcquirePixelCacheNexus(const size_t),
296 **DestroyPixelCacheNexus(NexusInfo **,const size_t);
297
298extern MagickExport PixelPacket
299 *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
300 const size_t,const size_t,NexusInfo *,ExceptionInfo *) magick_hot_spot,
301 *QueueAuthenticPixel(Image *,const ssize_t,const ssize_t,const size_t,
302 const size_t,const MagickBooleanType,NexusInfo *,ExceptionInfo *),
303 *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
304 const size_t,const size_t,const MagickBooleanType,NexusInfo *,
305 ExceptionInfo *) magick_hot_spot;
306
307extern MagickExport size_t
308 GetPixelCacheChannels(const Cache);
309
310extern MagickExport void
311 ClonePixelCacheMethods(Cache,const Cache),
312 GetPixelCacheTileSize(const Image *,size_t *,size_t *),
313 GetPixelCacheMethods(CacheMethods *),
314 SetPixelCacheMethods(Cache,CacheMethods *);
315
316extern MagickPrivate void
317 ResetCacheAnonymousMemory(void),
318 ResetPixelCacheEpoch(void);
319
320extern MagickPrivate MagickBooleanType
321 SyncImagePixelCache(Image *,ExceptionInfo *);
322
323#if defined(MAGICKCORE_OPENCL_SUPPORT)
324extern MagickPrivate cl_event
325 *GetOpenCLEvents(const Image *,cl_uint *);
326
327extern MagickPrivate cl_mem
328 GetAuthenticOpenCLBuffer(const Image *,ExceptionInfo *);
329
330extern MagickPrivate void
331 AddOpenCLEvent(const Image *,cl_event),
332 SyncAuthenticOpenCLBuffer(const Image *);
333#endif
334
335#if defined(__cplusplus) || defined(c_plusplus)
336}
337#endif
338
339#endif