MagickCore  6.9.13-12
Convert, Edit, Or Compose Bitmap Images
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)
30 extern "C" {
31 #endif
32 
33 typedef void
34  *Cache;
35 
36 typedef const IndexPacket
37  *(*GetVirtualIndexesFromHandler)(const Image *);
38 
39 typedef IndexPacket
40  *(*GetAuthenticIndexesFromHandler)(const Image *);
41 
42 typedef 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 
49 typedef 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 
54 typedef PixelPacket
55  *(*GetAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
56  const size_t,const size_t,ExceptionInfo *);
57 
58 typedef PixelPacket
59  *(*GetAuthenticPixelsFromHandler)(const Image *);
60 
61 typedef PixelPacket
62  *(*QueueAuthenticPixelsHandler)(Image *,const ssize_t,const ssize_t,
63  const size_t,const size_t,ExceptionInfo *);
64 
65 typedef void
66  (*DestroyPixelHandler)(Image *);
67 
68 typedef 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;
102 } CacheMethods;
103 
104 typedef 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 
132 typedef 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 
153 typedef 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 
193  NexusInfo
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 
215  RandomInfo
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 
252 static inline MagickBooleanType IsValidPixelOffset(const ssize_t x,
253  const size_t extent)
254 {
255  if (extent == 0)
256  return(MagickTrue);
257  if ((x >= (MAGICK_SSIZE_MAX/(ssize_t) extent)) ||
258  (x <= (MAGICK_SSIZE_MIN/(ssize_t) extent)))
259  return(MagickFalse);
260  return(MagickTrue);
261 }
262 
263 extern MagickExport Cache
264  AcquirePixelCache(const size_t),
265  ClonePixelCache(const Cache),
266  DestroyPixelCache(Cache),
267  ReferencePixelCache(Cache);
268 
269 extern MagickExport CacheType
270  GetPixelCacheType(const Image *);
271 
272 extern MagickExport ClassType
273  GetPixelCacheStorageClass(const Cache);
274 
275 extern MagickExport ColorspaceType
276  GetPixelCacheColorspace(const Cache);
277 
278 extern MagickExport const IndexPacket
279  *GetVirtualIndexesFromNexus(const Cache,NexusInfo *);
280 
281 extern 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 
287 extern MagickExport MagickBooleanType
288  SyncAuthenticPixelCacheNexus(Image *,NexusInfo *magick_restrict,
289  ExceptionInfo *) magick_hot_spot;
290 
291 extern MagickExport MagickSizeType
292  GetPixelCacheNexusExtent(const Cache,NexusInfo *);
293 
294 extern MagickExport NexusInfo
295  **AcquirePixelCacheNexus(const size_t),
296  **DestroyPixelCacheNexus(NexusInfo **,const size_t);
297 
298 extern 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 
307 extern MagickExport size_t
308  GetPixelCacheChannels(const Cache);
309 
310 extern MagickExport void
311  ClonePixelCacheMethods(Cache,const Cache),
312  GetPixelCacheTileSize(const Image *,size_t *,size_t *),
313  GetPixelCacheMethods(CacheMethods *),
314  SetPixelCacheMethods(Cache,CacheMethods *);
315 
316 extern MagickPrivate void
317  ResetCacheAnonymousMemory(void),
318  ResetPixelCacheEpoch(void);
319 
320 extern MagickPrivate MagickBooleanType
321  SyncImagePixelCache(Image *,ExceptionInfo *);
322 
323 #if defined(MAGICKCORE_OPENCL_SUPPORT)
324 extern MagickPrivate cl_event
325  *GetOpenCLEvents(const Image *,cl_uint *);
326 
327 extern MagickPrivate cl_mem
328  GetAuthenticOpenCLBuffer(const Image *,ExceptionInfo *);
329 
330 extern 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
Definition: image.h:134