MagickCore  6.9.12-67
Convert, Edit, Or Compose Bitmap Images
 All Data Structures
cache-private.h
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 <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 
115  PixelPacket
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 
146  PixelPacket
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 
196  PixelPacket
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 extern MagickExport Cache
253  AcquirePixelCache(const size_t),
254  ClonePixelCache(const Cache),
255  DestroyPixelCache(Cache),
256  ReferencePixelCache(Cache);
257 
258 extern MagickExport CacheType
259  GetPixelCacheType(const Image *);
260 
261 extern MagickExport ClassType
262  GetPixelCacheStorageClass(const Cache);
263 
264 extern MagickExport ColorspaceType
265  GetPixelCacheColorspace(const Cache);
266 
267 extern MagickExport const IndexPacket
268  *GetVirtualIndexesFromNexus(const Cache,NexusInfo *);
269 
270 extern MagickExport const PixelPacket
271  *GetVirtualPixelCacheNexus(const Image *,const VirtualPixelMethod,
272  const ssize_t,const ssize_t,const size_t,const size_t,NexusInfo *,
273  ExceptionInfo *) magick_hot_spot,
274  *GetVirtualPixelsNexus(const Cache,NexusInfo *);
275 
276 extern MagickExport MagickBooleanType
277  SyncAuthenticPixelCacheNexus(Image *,NexusInfo *magick_restrict,
278  ExceptionInfo *) magick_hot_spot;
279 
280 extern MagickExport MagickSizeType
281  GetPixelCacheNexusExtent(const Cache,NexusInfo *);
282 
283 extern MagickExport NexusInfo
284  **AcquirePixelCacheNexus(const size_t),
285  **DestroyPixelCacheNexus(NexusInfo **,const size_t);
286 
287 extern MagickExport PixelPacket
288  *GetAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
289  const size_t,const size_t,NexusInfo *,ExceptionInfo *) magick_hot_spot,
290  *QueueAuthenticPixel(Image *,const ssize_t,const ssize_t,const size_t,
291  const size_t,const MagickBooleanType,NexusInfo *,ExceptionInfo *),
292  *QueueAuthenticPixelCacheNexus(Image *,const ssize_t,const ssize_t,
293  const size_t,const size_t,const MagickBooleanType,NexusInfo *,
294  ExceptionInfo *) magick_hot_spot;
295 
296 extern MagickExport size_t
297  GetPixelCacheChannels(const Cache);
298 
299 extern MagickExport void
300  ClonePixelCacheMethods(Cache,const Cache),
301  GetPixelCacheTileSize(const Image *,size_t *,size_t *),
302  GetPixelCacheMethods(CacheMethods *),
303  SetPixelCacheMethods(Cache,CacheMethods *);
304 
305 extern MagickPrivate void
306  ResetPixelCacheEpoch(void);
307 
308 extern MagickPrivate MagickBooleanType
309  SyncImagePixelCache(Image *,ExceptionInfo *);
310 
311 #if defined(MAGICKCORE_OPENCL_SUPPORT)
312 extern MagickPrivate cl_event
313  *GetOpenCLEvents(const Image *,cl_uint *);
314 
315 extern MagickPrivate cl_mem
316  GetAuthenticOpenCLBuffer(const Image *,ExceptionInfo *);
317 
318 extern MagickPrivate void
319  AddOpenCLEvent(const Image *,cl_event),
320  SyncAuthenticOpenCLBuffer(const Image *);
321 #endif
322 
323 #if defined(__cplusplus) || defined(c_plusplus)
324 }
325 #endif
326 
327 #endif
Definition: image.h:152