111
111
*GetVirtualIndexesFromCache(const Image *);
113
113
static const PixelPacket
114
*GetVirtualPixelCache(const Image *,const VirtualPixelMethod,const ssize_t,
115
const ssize_t,const size_t,const size_t,ExceptionInfo *),
114
*GetVirtualPixelCache(const Image *,const VirtualPixelMethod,const long,
115
const long,const unsigned long,const unsigned long,ExceptionInfo *),
116
116
*GetVirtualPixelsCache(const Image *);
118
118
static MagickBooleanType
119
GetOneAuthenticPixelFromCache(Image *,const ssize_t,const ssize_t,PixelPacket *,
119
GetOneAuthenticPixelFromCache(Image *,const long,const long,PixelPacket *,
120
120
ExceptionInfo *),
121
121
GetOneVirtualPixelFromCache(const Image *,const VirtualPixelMethod,
122
const ssize_t,const ssize_t,PixelPacket *,ExceptionInfo *),
122
const long,const long,PixelPacket *,ExceptionInfo *),
123
123
OpenPixelCache(Image *,const MapMode,ExceptionInfo *),
124
124
ReadPixelCacheIndexes(CacheInfo *,NexusInfo *,ExceptionInfo *),
125
125
ReadPixelCachePixels(CacheInfo *,NexusInfo *,ExceptionInfo *),
128
128
WritePixelCachePixels(CacheInfo *,NexusInfo *,ExceptionInfo *);
130
130
static PixelPacket
131
*GetAuthenticPixelsCache(Image *,const ssize_t,const ssize_t,const size_t,
132
const size_t,ExceptionInfo *),
133
*QueueAuthenticPixelsCache(Image *,const ssize_t,const ssize_t,const size_t,
134
const size_t,ExceptionInfo *),
131
*GetAuthenticPixelsCache(Image *,const long,const long,const unsigned long,
132
const unsigned long,ExceptionInfo *),
133
*QueueAuthenticPixelsCache(Image *,const long,const long,const unsigned long,
134
const unsigned long,ExceptionInfo *),
135
135
*SetPixelCacheNexusPixels(const Image *,const RectangleInfo *,NexusInfo *,
136
136
ExceptionInfo *);
167
167
% The format of the AcquirePixelCache() method is:
169
% Cache AcquirePixelCache(const size_t number_threads)
169
% Cache AcquirePixelCache(const unsigned long number_threads)
171
171
% A description of each parameter follows:
173
173
% o number_threads: the number of nexus threads.
176
MagickExport Cache AcquirePixelCache(const size_t number_threads)
176
MagickExport Cache AcquirePixelCache(const unsigned long number_threads)
253
253
sizeof(*nexus_info));
254
254
if (nexus_info == (NexusInfo **) NULL)
255
255
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
256
for (i=0; i < (ssize_t) number_threads; i++)
256
for (i=0; i < (long) number_threads; i++)
258
258
nexus_info[i]=(NexusInfo *) AcquireAlignedMemory(1,sizeof(**nexus_info));
259
259
if (nexus_info[i] == (NexusInfo *) NULL)
450
450
nexus_info->region.height,clip_nexus[0],exception);
451
451
number_pixels=(MagickSizeType) nexus_info->region.width*
452
452
nexus_info->region.height;
453
for (i=0; i < (ssize_t) number_pixels; i++)
453
for (i=0; i < (long) number_pixels; i++)
455
455
if ((p == (PixelPacket *) NULL) || (r == (const PixelPacket *) NULL))
470
470
clip_nexus=DestroyPixelCacheNexus(clip_nexus,1);
471
471
image_nexus=DestroyPixelCacheNexus(image_nexus,1);
472
if (i < (ssize_t) number_pixels)
472
if (i < (long) number_pixels)
473
473
return(MagickFalse);
474
474
return(MagickTrue);
897
897
cache_info->cache_filename);
898
898
return(MagickFalse);
900
columns=(size_t) MagickMin(clone_info->columns,cache_info->columns);
901
rows=(size_t) MagickMin(clone_info->rows,cache_info->rows);
900
columns=(unsigned long) MagickMin(clone_info->columns,cache_info->columns);
901
rows=(unsigned long) MagickMin(clone_info->rows,cache_info->rows);
902
902
if ((clone_info->active_index_channel != MagickFalse) &&
903
903
(cache_info->active_index_channel != MagickFalse))
923
923
sizeof(*pixels)+cache_info->columns*rows*sizeof(*indexes);
924
924
offset=(MagickOffsetType) clone_info->columns*clone_info->rows*
925
925
sizeof(*pixels)+clone_info->columns*rows*sizeof(*indexes);
926
for (y=0; y < (ssize_t) rows; y++)
926
for (y=0; y < (long) rows; y++)
928
928
source_offset-=cache_info->columns*sizeof(*indexes);
929
929
count=ReadPixelCacheRegion(cache_info,cache_info->offset+source_offset,
949
949
(void) ResetMagickMemory(indexes,0,(size_t) length);
950
950
offset=(MagickOffsetType) clone_info->columns*clone_info->rows*
951
951
sizeof(*pixels)+(clone_info->columns*rows+columns)*sizeof(*indexes);
952
for (y=0; y < (ssize_t) rows; y++)
952
for (y=0; y < (long) rows; y++)
954
954
offset-=clone_info->columns*sizeof(*indexes);
955
955
count=WritePixelCacheRegion(clone_info,clone_info->offset+offset,
982
982
length=columns*sizeof(*pixels);
983
983
source_offset=(MagickOffsetType) cache_info->columns*rows*sizeof(*pixels);
984
984
offset=(MagickOffsetType) clone_info->columns*rows*sizeof(*pixels);
985
for (y=0; y < (ssize_t) rows; y++)
985
for (y=0; y < (long) rows; y++)
987
987
source_offset-=cache_info->columns*sizeof(*pixels);
988
988
count=ReadPixelCacheRegion(cache_info,cache_info->offset+source_offset,
1008
1008
sizeof(*pixels);
1009
1009
length=(clone_info->columns-cache_info->columns)*sizeof(*pixels);
1010
1010
(void) ResetMagickMemory(pixels,0,(size_t) length);
1011
for (y=0; y < (ssize_t) rows; y++)
1011
for (y=0; y < (long) rows; y++)
1013
1013
offset-=clone_info->columns*sizeof(*pixels);
1014
1014
count=WritePixelCacheRegion(clone_info,clone_info->offset+offset,length,
1057
1057
cache_info->cache_filename);
1058
1058
return(MagickFalse);
1060
columns=(size_t) MagickMin(clone_info->columns,cache_info->columns);
1061
rows=(size_t) MagickMin(clone_info->rows,cache_info->rows);
1060
columns=(unsigned long) MagickMin(clone_info->columns,cache_info->columns);
1061
rows=(unsigned long) MagickMin(clone_info->rows,cache_info->rows);
1062
1062
if ((clone_info->active_index_channel != MagickFalse) &&
1063
1063
(cache_info->active_index_channel != MagickFalse))
1083
1083
offset=(MagickOffsetType) cache_info->columns*cache_info->rows*
1084
1084
sizeof(*pixels)+cache_info->columns*rows*sizeof(*indexes);
1085
1085
q=clone_info->indexes+clone_info->columns*rows;
1086
for (y=0; y < (ssize_t) rows; y++)
1086
for (y=0; y < (long) rows; y++)
1088
1088
offset-=cache_info->columns*sizeof(IndexPacket);
1089
1089
count=ReadPixelCacheRegion(cache_info,cache_info->offset+offset,
1119
1119
length=columns*sizeof(*pixels);
1120
1120
offset=(MagickOffsetType) cache_info->columns*rows*sizeof(*pixels);
1121
1121
q=clone_info->pixels+clone_info->columns*rows;
1122
for (y=0; y < (ssize_t) rows; y++)
1122
for (y=0; y < (long) rows; y++)
1124
1124
offset-=cache_info->columns*sizeof(*pixels);
1125
1125
count=ReadPixelCacheRegion(cache_info,cache_info->offset+offset,length,
1129
1129
q-=clone_info->columns;
1130
1130
(void) CopyMagickMemory(q,pixels,(size_t) length);
1132
if (y < (ssize_t) rows)
1132
if (y < (long) rows)
1134
1134
pixels=(PixelPacket *) RelinquishMagickMemory(pixels);
1135
1135
ThrowFileException(exception,CacheError,"UnableToCloneCache",
1169
1169
clone_info->cache_filename);
1170
1170
return(MagickFalse);
1172
columns=(size_t) MagickMin(clone_info->columns,cache_info->columns);
1173
rows=(size_t) MagickMin(clone_info->rows,cache_info->rows);
1172
columns=(unsigned long) MagickMin(clone_info->columns,cache_info->columns);
1173
rows=(unsigned long) MagickMin(clone_info->rows,cache_info->rows);
1174
1174
if ((clone_info->active_index_channel != MagickFalse) &&
1175
1175
(cache_info->active_index_channel != MagickFalse))
1195
1195
p=cache_info->indexes+cache_info->columns*rows;
1196
1196
offset=(MagickOffsetType) clone_info->columns*clone_info->rows*
1197
1197
sizeof(*pixels)+clone_info->columns*rows*sizeof(*indexes);
1198
for (y=0; y < (ssize_t) rows; y++)
1198
for (y=0; y < (long) rows; y++)
1200
1200
p-=cache_info->columns;
1201
1201
(void) CopyMagickMemory(indexes,p,(size_t) length);
1218
1218
(void) ResetMagickMemory(indexes,0,(size_t) length);
1219
1219
offset=(MagickOffsetType) clone_info->columns*clone_info->rows*
1220
1220
sizeof(*pixels)+(clone_info->columns*rows+columns)*sizeof(*indexes);
1221
for (y=0; y < (ssize_t) rows; y++)
1221
for (y=0; y < (long) rows; y++)
1223
1223
offset-=clone_info->columns*sizeof(*indexes);
1224
1224
count=WritePixelCacheRegion(clone_info,clone_info->offset+offset,
1251
1251
length=columns*sizeof(*pixels);
1252
1252
p=cache_info->pixels+cache_info->columns*rows;
1253
1253
offset=(MagickOffsetType) clone_info->columns*rows*sizeof(*pixels);
1254
for (y=0; y < (ssize_t) rows; y++)
1254
for (y=0; y < (long) rows; y++)
1256
1256
p-=cache_info->columns;
1257
1257
(void) CopyMagickMemory(pixels,p,(size_t) length);
1274
1274
sizeof(*pixels);
1275
1275
length=(clone_info->columns-cache_info->columns)*sizeof(*pixels);
1276
1276
(void) ResetMagickMemory(pixels,0,(size_t) length);
1277
for (y=0; y < (ssize_t) rows; y++)
1277
for (y=0; y < (long) rows; y++)
1279
1279
offset-=clone_info->columns*sizeof(*pixels);
1280
1280
count=WritePixelCacheRegion(clone_info,clone_info->offset+offset,length,
1314
1314
if (cache_info->debug != MagickFalse)
1315
1315
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"memory => memory");
1316
columns=(size_t) MagickMin(clone_info->columns,cache_info->columns);
1317
rows=(size_t) MagickMin(clone_info->rows,cache_info->rows);
1316
columns=(unsigned long) MagickMin(clone_info->columns,cache_info->columns);
1317
rows=(unsigned long) MagickMin(clone_info->rows,cache_info->rows);
1318
1318
if ((clone_info->active_index_channel != MagickFalse) &&
1319
1319
(cache_info->active_index_channel != MagickFalse))
1334
1334
source_indexes=cache_info->indexes+cache_info->columns*rows;
1335
1335
indexes=clone_info->indexes+clone_info->columns*rows;
1336
for (y=0; y < (ssize_t) rows; y++)
1336
for (y=0; y < (long) rows; y++)
1338
1338
source_indexes-=cache_info->columns;
1339
1339
indexes-=clone_info->columns;
1345
1345
sizeof(*indexes);
1346
1346
indexes=clone_info->indexes+clone_info->columns*rows+
1347
1347
cache_info->columns;
1348
for (y=0; y < (ssize_t) rows; y++)
1348
for (y=0; y < (long) rows; y++)
1350
1350
indexes-=clone_info->columns;
1351
1351
(void) ResetMagickMemory(indexes,0,length);
1364
1364
source_pixels=cache_info->pixels+cache_info->columns*rows;
1365
1365
pixels=clone_info->pixels+clone_info->columns*rows;
1366
for (y=0; y < (ssize_t) rows; y++)
1366
for (y=0; y < (long) rows; y++)
1368
1368
source_pixels-=cache_info->columns;
1369
1369
pixels-=clone_info->columns;
1374
1374
length=(clone_info->columns-cache_info->columns)*sizeof(*pixels);
1375
1375
pixels=clone_info->pixels+clone_info->columns*rows+
1376
1376
cache_info->columns;
1377
for (y=0; y < (ssize_t) rows; y++)
1377
for (y=0; y < (long) rows; y++)
1379
1379
pixels-=clone_info->columns;
1380
1380
(void) ResetMagickMemory(pixels,0,length);
1640
1640
% The format of the DestroyPixelCacheNexus() method is:
1642
1642
% NexusInfo **DestroyPixelCacheNexus(NexusInfo *nexus_info,
1643
% const size_t number_threads)
1643
% const unsigned long number_threads)
1645
1645
% A description of each parameter follows:
1666
1666
MagickExport NexusInfo **DestroyPixelCacheNexus(NexusInfo **nexus_info,
1667
const size_t number_threads)
1667
const unsigned long number_threads)
1672
1672
assert(nexus_info != (NexusInfo **) NULL);
1673
for (i=0; i < (ssize_t) number_threads; i++)
1673
for (i=0; i < (long) number_threads; i++)
1675
1675
if (nexus_info[i]->cache != (PixelPacket *) NULL)
1676
1676
RelinquishCacheNexusPixels(nexus_info[i]);
1718
1718
if (image->debug != MagickFalse)
1719
1719
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
1720
1720
cache_info=(CacheInfo *) image->cache;
1721
1721
id=GetOpenMPThreadId();
1722
assert(id < (ssize_t) cache_info->number_threads);
1722
assert(id < (long) cache_info->number_threads);
1723
1723
indexes=GetPixelCacheNexusIndexes(image->cache,cache_info->nexus_info[id]);
1724
1724
return(indexes);
1786
1786
% The format of the GetAuthenticPixelCacheNexus() method is:
1788
% PixelPacket *GetAuthenticPixelCacheNexus(Image *image,const ssize_t x,
1789
% const ssize_t y,const size_t columns,const size_t rows,
1788
% PixelPacket *GetAuthenticPixelCacheNexus(Image *image,const long x,
1789
% const long y,const unsigned long columns,const unsigned long rows,
1790
1790
% NexusInfo *nexus_info,ExceptionInfo *exception)
1792
1792
% A description of each parameter follows:
1817
1815
return(MagickTrue);
1820
MagickExport PixelPacket *GetAuthenticPixelCacheNexus(Image *image,const ssize_t x,
1821
const ssize_t y,const size_t columns,const size_t rows,
1818
MagickExport PixelPacket *GetAuthenticPixelCacheNexus(Image *image,const long x,
1819
const long y,const unsigned long columns,const unsigned long rows,
1822
1820
NexusInfo *nexus_info,ExceptionInfo *exception)
1887
1885
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
1888
1886
cache_info=(CacheInfo *) image->cache;
1889
1887
id=GetOpenMPThreadId();
1890
assert(id < (ssize_t) cache_info->number_threads);
1888
assert(id < (long) cache_info->number_threads);
1891
1889
pixels=GetPixelCacheNexusPixels(image->cache,cache_info->nexus_info[id]);
1892
1890
return(pixels);
1966
1964
% The format of the GetAuthenticPixels() method is:
1968
% PixelPacket *GetAuthenticPixels(Image *image,const ssize_t x,
1969
% const ssize_t y,const size_t columns,const size_t rows,
1966
% PixelPacket *GetAuthenticPixels(Image *image,const long x,const long y,
1967
% const unsigned long columns,const unsigned long rows,
1970
1968
% ExceptionInfo *exception)
1972
1970
% A description of each parameter follows:
1979
1977
% o exception: return any errors or warnings in this structure.
1982
MagickExport PixelPacket *GetAuthenticPixels(Image *image,const ssize_t x,
1983
const ssize_t y,const size_t columns,const size_t rows,
1980
MagickExport PixelPacket *GetAuthenticPixels(Image *image,const long x,
1981
const long y,const unsigned long columns,const unsigned long rows,
1984
1982
ExceptionInfo *exception)
2022
2020
% The format of the GetAuthenticPixelsCache() method is:
2024
% PixelPacket *GetAuthenticPixelsCache(Image *image,const ssize_t x,
2025
% const ssize_t y,const size_t columns,const size_t rows,
2022
% PixelPacket *GetAuthenticPixelsCache(Image *image,const long x,
2023
% const long y,const unsigned long columns,const unsigned long rows,
2026
2024
% ExceptionInfo *exception)
2028
2026
% A description of each parameter follows:
2035
2033
% o exception: return any errors or warnings in this structure.
2038
static PixelPacket *GetAuthenticPixelsCache(Image *image,const ssize_t x,
2039
const ssize_t y,const size_t columns,const size_t rows,
2036
static PixelPacket *GetAuthenticPixelsCache(Image *image,const long x,
2037
const long y,const unsigned long columns,const unsigned long rows,
2040
2038
ExceptionInfo *exception)
2052
2050
if (cache_info == (Cache) NULL)
2053
2051
return((PixelPacket *) NULL);
2054
2052
id=GetOpenMPThreadId();
2055
assert(id < (ssize_t) cache_info->number_threads);
2053
assert(id < (long) cache_info->number_threads);
2056
2054
pixels=GetAuthenticPixelCacheNexus(image,x,y,columns,rows,
2057
2055
cache_info->nexus_info[id],exception);
2058
2056
return(pixels);
2100
2098
cache_info=(CacheInfo *) image->cache;
2101
2099
assert(cache_info->signature == MagickSignature);
2102
2100
id=GetOpenMPThreadId();
2103
assert(id < (ssize_t) cache_info->number_threads);
2101
assert(id < (long) cache_info->number_threads);
2104
2102
extent=GetPixelCacheNexusExtent(image->cache,cache_info->nexus_info[id]);
2105
2103
return(extent);
2259
2257
% The format of the GetOneAuthenticPixel() method is:
2261
% MagickBooleanType GetOneAuthenticPixel(const Image image,const ssize_t x,
2262
% const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
2259
% MagickBooleanType GetOneAuthenticPixel(const Image image,const long x,
2260
% const long y,PixelPacket *pixel,ExceptionInfo *exception)
2264
2262
% A description of each parameter follows:
2272
2270
% o exception: return any errors or warnings in this structure.
2275
MagickExport MagickBooleanType GetOneAuthenticPixel(Image *image,const ssize_t x,
2276
const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
2273
MagickExport MagickBooleanType GetOneAuthenticPixel(Image *image,const long x,
2274
const long y,PixelPacket *pixel,ExceptionInfo *exception)
2319
2317
% The format of the GetOneAuthenticPixelFromCache() method is:
2321
2319
% MagickBooleanType GetOneAuthenticPixelFromCache(const Image image,
2322
% const ssize_t x,const ssize_t y,PixelPacket *pixel,
2323
% ExceptionInfo *exception)
2320
% const long x,const long y,PixelPacket *pixel,ExceptionInfo *exception)
2325
2322
% A description of each parameter follows:
2336
2333
static MagickBooleanType GetOneAuthenticPixelFromCache(Image *image,
2337
const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
2334
const long x,const long y,PixelPacket *pixel,ExceptionInfo *exception)
2367
2364
% The format of the GetOneVirtualMagickPixel() method is:
2369
2366
% MagickBooleanType GetOneVirtualMagickPixel(const Image image,
2370
% const ssize_t x,const ssize_t y,MagickPixelPacket *pixel,
2367
% const long x,const long y,MagickPixelPacket *pixel,
2371
2368
% ExceptionInfo exception)
2373
2370
% A description of each parameter follows:
2384
2381
MagickExport MagickBooleanType GetOneVirtualMagickPixel(const Image *image,
2385
const ssize_t x,const ssize_t y,MagickPixelPacket *pixel,ExceptionInfo *exception)
2382
const long x,const long y,MagickPixelPacket *pixel,ExceptionInfo *exception)
2427
2424
% The format of the GetOneVirtualMethodPixel() method is:
2429
2426
% MagickBooleanType GetOneVirtualMethodPixel(const Image image,
2430
% const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
2431
% const ssize_t y,Pixelpacket *pixel,ExceptionInfo exception)
2427
% const VirtualPixelMethod virtual_pixel_method,const long x,
2428
% const long y,Pixelpacket *pixel,ExceptionInfo exception)
2433
2430
% A description of each parameter follows:
2446
2443
MagickExport MagickBooleanType GetOneVirtualMethodPixel(const Image *image,
2447
const VirtualPixelMethod virtual_pixel_method,const ssize_t x,const ssize_t y,
2444
const VirtualPixelMethod virtual_pixel_method,const long x,const long y,
2448
2445
PixelPacket *pixel,ExceptionInfo *exception)
2450
2447
GetOneVirtualPixelFromHandler
2490
2487
% The format of the GetOneVirtualPixel() method is:
2492
% MagickBooleanType GetOneVirtualPixel(const Image image,const ssize_t x,
2493
% const ssize_t y,PixelPacket *pixel,ExceptionInfo exception)
2489
% MagickBooleanType GetOneVirtualPixel(const Image image,const long x,
2490
% const long y,PixelPacket *pixel,ExceptionInfo exception)
2495
2492
% A description of each parameter follows:
2506
2503
MagickExport MagickBooleanType GetOneVirtualPixel(const Image *image,
2507
const ssize_t x,const ssize_t y,PixelPacket *pixel,ExceptionInfo *exception)
2504
const long x,const long y,PixelPacket *pixel,ExceptionInfo *exception)
2509
2506
GetOneVirtualPixelFromHandler
2510
2507
get_one_virtual_pixel_from_handler;
2549
2546
% The format of the GetOneVirtualPixelFromCache() method is:
2551
2548
% MagickBooleanType GetOneVirtualPixelFromCache(const Image image,
2552
% const VirtualPixelPacket method,const ssize_t x,const ssize_t y,
2549
% const VirtualPixelPacket method,const long x,const long y,
2553
2550
% PixelPacket *pixel,ExceptionInfo *exception)
2555
2552
% A description of each parameter follows:
2568
2565
static MagickBooleanType GetOneVirtualPixelFromCache(const Image *image,
2569
const VirtualPixelMethod virtual_pixel_method,const ssize_t x,const ssize_t y,
2566
const VirtualPixelMethod virtual_pixel_method,const long x,const long y,
2570
2567
PixelPacket *pixel,ExceptionInfo *exception)
2572
2569
const PixelPacket
2886
2883
% The format of the GetPixelCacheTileSize() method is:
2888
% void GetPixelCacheTileSize(const Image *image,size_t *width,
2885
% void GetPixelCacheTileSize(const Image *image,unsigned long *width,
2886
% unsigned long *height)
2891
2888
% A description of each parameter follows:
2897
2894
% o height: the optimize cache tile height in pixels.
2900
MagickExport void GetPixelCacheTileSize(const Image *image,size_t *width,
2897
MagickExport void GetPixelCacheTileSize(const Image *image,unsigned long *width,
2898
unsigned long *height)
3023
3020
const IndexPacket
3029
3026
if (image->debug != MagickFalse)
3030
3027
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3031
3028
cache_info=(CacheInfo *) image->cache;
3032
3029
id=GetOpenMPThreadId();
3033
assert(id < (ssize_t) cache_info->number_threads);
3030
assert(id < (long) cache_info->number_threads);
3034
3031
indexes=GetVirtualIndexesFromNexus(image->cache,cache_info->nexus_info[id]);
3035
3032
return(indexes);
3137
3134
% The format of the GetVirtualPixelsFromNexus() method is:
3139
3136
% PixelPacket *GetVirtualPixelsFromNexus(const Image *image,
3140
% const VirtualPixelMethod method,const ssize_t x,const ssize_t y,
3141
% const size_t columns,const size_t rows,NexusInfo *nexus_info,
3142
% ExceptionInfo *exception)
3137
% const VirtualPixelMethod method,const long x,const long y,
3138
% const unsigned long columns,const unsigned long rows,
3139
% NexusInfo *nexus_info,ExceptionInfo *exception)
3144
3141
% A description of each parameter follows:
3169
3166
42, 26, 38, 22, 41, 25, 37, 21
3172
static inline ssize_t DitherX(const ssize_t x,const size_t columns)
3169
static inline long DitherX(const long x,const unsigned long columns)
3177
3174
index=x+DitherMatrix[x & 0x07]-32L;
3178
3175
if (index < 0L)
3180
if (index >= (ssize_t) columns)
3181
return((ssize_t) columns-1L);
3177
if (index >= (long) columns)
3178
return((long) columns-1L);
3185
static inline ssize_t DitherY(const ssize_t y,const size_t rows)
3182
static inline long DitherY(const long y,const unsigned long rows)
3190
3187
index=y+DitherMatrix[y & 0x07]-32L;
3191
3188
if (index < 0L)
3193
if (index >= (ssize_t) rows)
3194
return((ssize_t) rows-1L);
3190
if (index >= (long) rows)
3191
return((long) rows-1L);
3198
static inline ssize_t EdgeX(const ssize_t x,const size_t columns)
3195
static inline long EdgeX(const long x,const unsigned long columns)
3202
if (x >= (ssize_t) columns)
3203
return((ssize_t) (columns-1));
3199
if (x >= (long) columns)
3200
return((long) (columns-1));
3207
static inline ssize_t EdgeY(const ssize_t y,const size_t rows)
3204
static inline long EdgeY(const long y,const unsigned long rows)
3211
if (y >= (ssize_t) rows)
3212
return((ssize_t) (rows-1));
3208
if (y >= (long) rows)
3209
return((long) (rows-1));
3216
static inline ssize_t RandomX(RandomInfo *random_info,const size_t columns)
3213
static inline long RandomX(RandomInfo *random_info,const unsigned long columns)
3218
return((ssize_t) (columns*GetPseudoRandomValue(random_info)));
3215
return((long) (columns*GetPseudoRandomValue(random_info)));
3221
static inline ssize_t RandomY(RandomInfo *random_info,const size_t rows)
3218
static inline long RandomY(RandomInfo *random_info,const unsigned long rows)
3223
return((ssize_t) (rows*GetPseudoRandomValue(random_info)));
3220
return((long) (rows*GetPseudoRandomValue(random_info)));
3230
3227
essentially a ldiv() using a floored modulo division rather than the normal
3231
3228
default truncated modulo division.
3233
static inline MagickModulo VirtualPixelModulo(const ssize_t offset,
3234
const size_t extent)
3230
static inline MagickModulo VirtualPixelModulo(const long offset,
3231
const unsigned long extent)
3239
modulo.quotient=offset/(ssize_t) extent;
3236
modulo.quotient=offset/(long) extent;
3240
3237
if (offset < 0L)
3241
3238
modulo.quotient--;
3242
modulo.remainder=offset-modulo.quotient*(ssize_t) extent;
3239
modulo.remainder=offset-modulo.quotient*(long) extent;
3243
3240
return(modulo);
3246
3243
MagickExport const PixelPacket *GetVirtualPixelsFromNexus(const Image *image,
3247
const VirtualPixelMethod virtual_pixel_method,const ssize_t x,const ssize_t y,
3248
const size_t columns,const size_t rows,NexusInfo *nexus_info,
3244
const VirtualPixelMethod virtual_pixel_method,const long x,const long y,
3245
const unsigned long columns,const unsigned long rows,NexusInfo *nexus_info,
3249
3246
ExceptionInfo *exception)
3257
3251
MagickOffsetType
3302
3296
pixels=SetPixelCacheNexusPixels(image,®ion,nexus_info,exception);
3303
3297
if (pixels == (PixelPacket *) NULL)
3304
3298
return((const PixelPacket *) NULL);
3305
offset=(MagickOffsetType) nexus_info->region.y*cache_info->columns+
3306
nexus_info->region.x;
3307
length=(MagickSizeType) (nexus_info->region.height-1L)*cache_info->columns+
3308
nexus_info->region.width-1L;
3299
offset=(MagickOffsetType) region.y*cache_info->columns+region.x;
3300
length=(MagickSizeType) (region.height-1L)*cache_info->columns+
3309
3302
number_pixels=(MagickSizeType) cache_info->columns*cache_info->rows;
3310
3303
if ((offset >= 0) && (((MagickSizeType) offset+length) < number_pixels))
3311
if ((x >= 0) && ((ssize_t) (x+columns) <= (ssize_t) cache_info->columns) &&
3312
(y >= 0) && ((ssize_t) (y+rows) <= (ssize_t) cache_info->rows))
3304
if ((x >= 0) && ((long) (x+columns) <= (long) cache_info->columns) &&
3305
(y >= 0) && ((long) (y+rows) <= (long) cache_info->rows))
3314
3307
MagickBooleanType
3388
for (v=0; v < (ssize_t) rows; v++)
3380
for (v=0; v < (long) rows; v++)
3390
for (u=0; u < (ssize_t) columns; u+=length)
3382
for (u=0; u < (long) columns; u+=length)
3392
3384
length=(MagickSizeType) MagickMin(cache_info->columns-(x+u),columns-u);
3393
if ((((x+u) < 0) || ((x+u) >= (ssize_t) cache_info->columns)) ||
3394
(((y+v) < 0) || ((y+v) >= (ssize_t) cache_info->rows)) || (length == 0))
3385
if ((((x+u) < 0) || ((x+u) >= (long) cache_info->columns)) ||
3386
(((y+v) < 0) || ((y+v) >= (long) cache_info->rows)) || (length == 0))
3421
3412
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3422
3413
EdgeX(x+u,cache_info->columns),EdgeY(y+v,cache_info->rows),
3423
3414
1UL,1UL,virtual_nexus[0],exception);
3424
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3428
3417
case RandomVirtualPixelMethod:
3433
3422
RandomX(cache_info->random_info,cache_info->columns),
3434
3423
RandomY(cache_info->random_info,cache_info->rows),1UL,1UL,
3435
3424
virtual_nexus[0],exception);
3436
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3440
3427
case DitherVirtualPixelMethod:
3442
3429
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3443
3430
DitherX(x+u,cache_info->columns),DitherY(y+v,cache_info->rows),
3444
3431
1UL,1UL,virtual_nexus[0],exception);
3445
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3449
3434
case TileVirtualPixelMethod:
3453
3438
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3454
3439
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
3456
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3460
3443
case MirrorVirtualPixelMethod:
3462
3445
x_modulo=VirtualPixelModulo(x+u,cache_info->columns);
3463
3446
if ((x_modulo.quotient & 0x01) == 1L)
3464
x_modulo.remainder=(ssize_t) cache_info->columns-
3447
x_modulo.remainder=(long) cache_info->columns-
3465
3448
x_modulo.remainder-1L;
3466
3449
y_modulo=VirtualPixelModulo(y+v,cache_info->rows);
3467
3450
if ((y_modulo.quotient & 0x01) == 1L)
3468
y_modulo.remainder=(ssize_t) cache_info->rows-
3451
y_modulo.remainder=(long) cache_info->rows-
3469
3452
y_modulo.remainder-1L;
3470
3453
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3471
3454
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
3473
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3477
3458
case CheckerTileVirtualPixelMethod:
3481
3462
if (((x_modulo.quotient ^ y_modulo.quotient) & 0x01) != 0L)
3483
3464
p=(&virtual_pixel);
3484
virtual_indexes=(&virtual_index);
3487
3467
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3488
3468
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
3490
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3494
3472
case HorizontalTileVirtualPixelMethod:
3496
if (((y+v) < 0) || ((y+v) >= (ssize_t) cache_info->rows))
3474
if (((y+v) < 0) || ((y+v) >= (long) cache_info->rows))
3498
3476
p=(&virtual_pixel);
3499
virtual_indexes=(&virtual_index);
3502
3479
x_modulo=VirtualPixelModulo(x+u,cache_info->columns);
3504
3481
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3505
3482
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
3507
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3511
3486
case VerticalTileVirtualPixelMethod:
3513
if (((x+u) < 0) || ((x+u) >= (ssize_t) cache_info->columns))
3488
if (((x+u) < 0) || ((x+u) >= (long) cache_info->columns))
3515
3490
p=(&virtual_pixel);
3516
virtual_indexes=(&virtual_index);
3519
3493
x_modulo=VirtualPixelModulo(x+u,cache_info->columns);
3521
3495
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3522
3496
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
3524
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3528
3500
case HorizontalTileEdgeVirtualPixelMethod:
3531
3503
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3532
3504
x_modulo.remainder,EdgeY(y+v,cache_info->rows),1UL,1UL,
3533
3505
virtual_nexus[0],exception);
3534
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3538
3508
case VerticalTileEdgeVirtualPixelMethod:
3541
3511
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
3542
3512
EdgeX(x+u,cache_info->columns),y_modulo.remainder,1UL,1UL,
3543
3513
virtual_nexus[0],exception);
3544
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
3549
3517
if (p == (const PixelPacket *) NULL)
3552
if ((indexes != (IndexPacket *) NULL) &&
3553
(virtual_indexes != (const IndexPacket *) NULL))
3554
*indexes++=(*virtual_indexes);
3520
if (indexes != (IndexPacket *) NULL)
3522
nexus_indexes=GetVirtualIndexesFromNexus(cache_info,
3524
if (nexus_indexes != (const IndexPacket *) NULL)
3525
*indexes++=(*nexus_indexes);
3558
3530
Transfer a run of pixels.
3560
3532
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x+u,y+v,
3561
(size_t) length,1UL,virtual_nexus[0],exception);
3533
(unsigned long) length,1UL,virtual_nexus[0],exception);
3562
3534
if (p == (const PixelPacket *) NULL)
3564
virtual_indexes=GetVirtualIndexesFromNexus(cache_info,virtual_nexus[0]);
3565
3536
(void) CopyMagickMemory(q,p,(size_t) length*sizeof(*p));
3567
if ((indexes != (IndexPacket *) NULL) &&
3568
(virtual_indexes != (const IndexPacket *) NULL))
3538
if (indexes != (IndexPacket *) NULL)
3570
(void) CopyMagickMemory(indexes,virtual_indexes,(size_t) length*
3571
sizeof(*virtual_indexes));
3540
nexus_indexes=GetVirtualIndexesFromNexus(cache_info,virtual_nexus[0]);
3541
if (nexus_indexes != (const IndexPacket *) NULL)
3543
(void) CopyMagickMemory(indexes,nexus_indexes,(size_t) length*
3544
sizeof(*nexus_indexes));
3595
3569
% The format of the GetVirtualPixelCache() method is:
3597
3571
% const PixelPacket *GetVirtualPixelCache(const Image *image,
3598
% const VirtualPixelMethod virtual_pixel_method,const ssize_t x,
3599
% const ssize_t y,const size_t columns,const size_t rows,
3572
% const VirtualPixelMethod virtual_pixel_method,const long x,
3573
% const long y,const unsigned long columns,const unsigned long rows,
3600
3574
% ExceptionInfo *exception)
3602
3576
% A description of each parameter follows:
3614
3588
static const PixelPacket *GetVirtualPixelCache(const Image *image,
3615
const VirtualPixelMethod virtual_pixel_method,const ssize_t x,const ssize_t y,
3616
const size_t columns,const size_t rows,ExceptionInfo *exception)
3589
const VirtualPixelMethod virtual_pixel_method,const long x,const long y,
3590
const unsigned long columns,const unsigned long rows,ExceptionInfo *exception)
3621
3595
const PixelPacket
3627
3601
if (image->debug != MagickFalse)
3628
3602
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3629
3603
cache_info=(CacheInfo *) image->cache;
3630
3604
id=GetOpenMPThreadId();
3631
assert(id < (ssize_t) cache_info->number_threads);
3605
assert(id < (long) cache_info->number_threads);
3632
3606
pixels=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x,y,columns,rows,
3633
3607
cache_info->nexus_info[id],exception);
3634
3608
return(pixels);
3710
3684
% The format of the GetVirtualPixels() method is:
3712
% const PixelPacket *GetVirtualPixels(const Image *image,const ssize_t x,
3713
% const ssize_t y,const size_t columns,const size_t rows,
3686
% const PixelPacket *GetVirtualPixels(const Image *image,const long x,
3687
% const long y,const unsigned long columns,const unsigned long rows,
3714
3688
% ExceptionInfo *exception)
3716
3690
% A description of each parameter follows:
3726
3700
MagickExport const PixelPacket *GetVirtualPixels(const Image *image,
3727
const ssize_t x,const ssize_t y,const size_t columns,
3728
const size_t rows,ExceptionInfo *exception)
3701
const long x,const long y,const unsigned long columns,
3702
const unsigned long rows,ExceptionInfo *exception)
3779
3753
const PixelPacket
3785
3759
if (image->debug != MagickFalse)
3786
3760
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3787
3761
cache_info=(CacheInfo *) image->cache;
3788
3762
id=GetOpenMPThreadId();
3789
assert(id < (ssize_t) cache_info->number_threads);
3763
assert(id < (long) cache_info->number_threads);
3790
3764
pixels=GetVirtualPixelsNexus(image->cache,cache_info->nexus_info[id]);
3791
3765
return(pixels);
3942
3916
GetMagickPixelPacket(image,&beta);
3943
3917
number_pixels=(MagickSizeType) nexus_info->region.width*
3944
3918
nexus_info->region.height;
3945
for (i=0; i < (ssize_t) number_pixels; i++)
3919
for (i=0; i < (long) number_pixels; i++)
3947
3921
if ((p == (PixelPacket *) NULL) || (r == (const PixelPacket *) NULL))
3963
3937
clip_nexus=DestroyPixelCacheNexus(clip_nexus,1);
3964
3938
image_nexus=DestroyPixelCacheNexus(image_nexus,1);
3965
if (i < (ssize_t) number_pixels)
3939
if (i < (long) number_pixels)
3966
3940
return(MagickFalse);
3967
3941
return(MagickTrue);
4031
4005
(void) FormatMagickSize(length,MagickFalse,format);
4032
4006
(void) FormatMagickString(message,MaxTextExtent,
4033
"extend %s (%s[%d], disk, %sB)",cache_info->filename,
4007
"extend %s (%s[%d], disk, %s)",cache_info->filename,
4034
4008
cache_info->cache_filename,cache_info->file,format);
4035
4009
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s",message);
4077
4051
cache_info=(CacheInfo *) image->cache;
4078
4052
source_info=(*cache_info);
4079
4053
source_info.file=(-1);
4080
(void) FormatMagickString(cache_info->filename,MaxTextExtent,"%s[%.20g]",
4081
image->filename,(double) GetImageIndexInList(image));
4054
(void) FormatMagickString(cache_info->filename,MaxTextExtent,"%s[%ld]",
4055
image->filename,GetImageIndexInList(image));
4082
4056
cache_info->mode=mode;
4083
4057
cache_info->rows=image->rows;
4084
4058
cache_info->columns=image->columns;
4085
4059
cache_info->active_index_channel=((image->storage_class == PseudoClass) ||
4086
4060
(image->colorspace == CMYKColorspace)) ? MagickTrue : MagickFalse;
4087
if (image->ping != MagickFalse)
4089
cache_info->storage_class=image->storage_class;
4090
cache_info->colorspace=image->colorspace;
4091
cache_info->type=PingCache;
4092
cache_info->pixels=(PixelPacket *) NULL;
4093
cache_info->indexes=(IndexPacket *) NULL;
4094
cache_info->length=0;
4097
4061
number_pixels=(MagickSizeType) cache_info->columns*cache_info->rows;
4098
4062
packet_size=sizeof(PixelPacket);
4099
4063
if (cache_info->active_index_channel != MagickFalse)
4100
4064
packet_size+=sizeof(IndexPacket);
4101
4065
length=number_pixels*packet_size;
4102
columns=(size_t) (length/cache_info->rows/packet_size);
4066
columns=(unsigned long) (length/cache_info->rows/packet_size);
4103
4067
if (cache_info->columns != columns)
4104
4068
ThrowBinaryException(ResourceLimitError,"PixelCacheAllocationFailed",
4105
4069
image->filename);
4125
4089
(void) FormatMagickSize(cache_info->length,MagickTrue,
4127
4091
(void) FormatMagickString(message,MaxTextExtent,
4128
"open %s (%s memory, %.20gx%.20g %sB)",cache_info->filename,
4092
"open %s (%s memory, %lux%lu %s)",cache_info->filename,
4129
4093
cache_info->mapped != MagickFalse ? "anonymous" : "heap",
4130
(double) cache_info->columns,(double) cache_info->rows,
4094
cache_info->columns,cache_info->rows,format);
4132
4095
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s",
4219
4182
(void) FormatMagickSize(cache_info->length,MagickTrue,
4221
4184
(void) FormatMagickString(message,MaxTextExtent,
4222
"open %s (%s[%d], memory-mapped, %.20gx%.20g %sB)",
4185
"open %s (%s[%d], memory-mapped, %lux%lu %s)",
4223
4186
cache_info->filename,cache_info->cache_filename,
4224
cache_info->file,(double) cache_info->columns,(double)
4225
cache_info->rows,format);
4187
cache_info->file,cache_info->columns,cache_info->rows,
4226
4189
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s",
4241
4204
(void) FormatMagickSize(cache_info->length,MagickFalse,format);
4242
4205
(void) FormatMagickString(message,MaxTextExtent,
4243
"open %s (%s[%d], disk, %.20gx%.20g %sB)",cache_info->filename,
4244
cache_info->cache_filename,cache_info->file,(double)
4245
cache_info->columns,(double) cache_info->rows,format);
4206
"open %s (%s[%d], disk, %lux%lu %s)",cache_info->filename,
4207
cache_info->cache_filename,cache_info->file,cache_info->columns,
4208
cache_info->rows,format);
4246
4209
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s",message);
4248
4211
return(MagickTrue);
4404
4367
% The format of the QueueAuthenticNexus() method is:
4406
% PixelPacket *QueueAuthenticNexus(Image *image,const ssize_t x,
4407
% const ssize_t y,const size_t columns,const size_t rows,
4369
% PixelPacket *QueueAuthenticNexus(Image *image,const long x,const long y,
4370
% const unsigned long columns,const unsigned long rows,
4408
4371
% NexusInfo *nexus_info,ExceptionInfo *exception)
4410
4373
% A description of each parameter follows:
4419
4382
% o exception: return any errors or warnings in this structure.
4422
MagickExport PixelPacket *QueueAuthenticNexus(Image *image,const ssize_t x,
4423
const ssize_t y,const size_t columns,const size_t rows,
4385
MagickExport PixelPacket *QueueAuthenticNexus(Image *image,const long x,
4386
const long y,const unsigned long columns,const unsigned long rows,
4424
4387
NexusInfo *nexus_info,ExceptionInfo *exception)
4445
4408
"NoPixelsDefinedInCache","`%s'",image->filename);
4446
4409
return((PixelPacket *) NULL);
4448
if ((x < 0) || (y < 0) || (x >= (ssize_t) cache_info->columns) ||
4449
(y >= (ssize_t) cache_info->rows))
4411
if ((x < 0) || (y < 0) || (x >= (long) cache_info->columns) ||
4412
(y >= (long) cache_info->rows))
4451
4414
(void) ThrowMagickException(exception,GetMagickModule(),CacheError,
4452
4415
"PixelsAreNotAuthentic","`%s'",image->filename);
4489
4452
% The format of the QueueAuthenticPixelsCache() method is:
4491
% PixelPacket *QueueAuthenticPixelsCache(Image *image,const ssize_t x,
4492
% const ssize_t y,const size_t columns,const size_t rows,
4454
% PixelPacket *QueueAuthenticPixelsCache(Image *image,const long x,
4455
% const long y,const unsigned long columns,const unsigned long rows,
4493
4456
% ExceptionInfo *exception)
4495
4458
% A description of each parameter follows:
4502
4465
% o exception: return any errors or warnings in this structure.
4505
static PixelPacket *QueueAuthenticPixelsCache(Image *image,const ssize_t x,
4506
const ssize_t y,const size_t columns,const size_t rows,
4468
static PixelPacket *QueueAuthenticPixelsCache(Image *image,const long x,
4469
const long y,const unsigned long columns,const unsigned long rows,
4507
4470
ExceptionInfo *exception)
4519
4482
if (cache_info == (Cache) NULL)
4520
4483
return((PixelPacket *) NULL);
4521
4484
id=GetOpenMPThreadId();
4522
assert(id < (ssize_t) cache_info->number_threads);
4485
assert(id < (long) cache_info->number_threads);
4523
4486
pixels=QueueAuthenticNexus(image,x,y,columns,rows,cache_info->nexus_info[id],
4525
4488
return(pixels);
4568
4531
% The format of the QueueAuthenticPixels() method is:
4570
% PixelPacket *QueueAuthenticPixels(Image *image,const ssize_t x,
4571
% const ssize_t y,const size_t columns,const size_t rows,
4533
% PixelPacket *QueueAuthenticPixels(Image *image,const long x,const long y,
4534
% const unsigned long columns,const unsigned long rows,
4572
4535
% ExceptionInfo *exception)
4574
4537
% A description of each parameter follows:
4581
4544
% o exception: return any errors or warnings in this structure.
4584
MagickExport PixelPacket *QueueAuthenticPixels(Image *image,const ssize_t x,
4585
const ssize_t y,const size_t columns,const size_t rows,
4547
MagickExport PixelPacket *QueueAuthenticPixels(Image *image,const long x,
4548
const long y,const unsigned long columns,const unsigned long rows,
4586
4549
ExceptionInfo *exception)
4687
4650
p=cache_info->indexes+offset;
4688
for (y=0; y < (ssize_t) rows; y++)
4651
for (y=0; y < (long) rows; y++)
4690
4653
(void) CopyMagickMemory(q,p,(size_t) length);
4691
4654
p+=cache_info->columns;
4713
4676
number_pixels=(MagickSizeType) cache_info->columns*cache_info->rows;
4714
for (y=0; y < (ssize_t) rows; y++)
4677
for (y=0; y < (long) rows; y++)
4716
4679
count=ReadPixelCacheRegion(cache_info,cache_info->offset+number_pixels*
4717
4680
sizeof(PixelPacket)+offset*sizeof(*q),length,(unsigned char *) q);
4720
4683
offset+=cache_info->columns;
4721
4684
q+=nexus_info->region.width;
4723
if (y < (ssize_t) rows)
4686
if (y < (long) rows)
4725
4688
ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
4726
4689
cache_info->cache_filename);
4734
4697
if ((cache_info->debug != MagickFalse) &&
4735
(QuantumTick((MagickOffsetType) nexus_info->region.y,cache_info->rows) != MagickFalse))
4736
(void) LogMagickEvent(CacheEvent,GetMagickModule(),
4737
"%s[%.20gx%.20g%+.20g%+.20g]",cache_info->filename,(double)
4738
nexus_info->region.width,(double) nexus_info->region.height,(double)
4739
nexus_info->region.x,(double) nexus_info->region.y);
4698
(QuantumTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
4699
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s[%lux%lu%+ld%+ld]",
4700
cache_info->filename,nexus_info->region.width,nexus_info->region.height,
4701
nexus_info->region.x,nexus_info->region.y);
4740
4702
return(MagickTrue);
4819
4781
p=cache_info->pixels+offset;
4820
for (y=0; y < (ssize_t) rows; y++)
4782
for (y=0; y < (long) rows; y++)
4822
4784
(void) CopyMagickMemory(q,p,(size_t) length);
4823
4785
p+=cache_info->columns;
4842
4804
length=number_pixels;
4845
for (y=0; y < (ssize_t) rows; y++)
4807
for (y=0; y < (long) rows; y++)
4847
4809
count=ReadPixelCacheRegion(cache_info,cache_info->offset+offset*
4848
4810
sizeof(*q),length,(unsigned char *) q);
4851
4813
offset+=cache_info->columns;
4852
4814
q+=nexus_info->region.width;
4854
if (y < (ssize_t) rows)
4816
if (y < (long) rows)
4856
4818
ThrowFileException(exception,CacheError,"UnableToReadPixelCache",
4857
4819
cache_info->cache_filename);
4865
4827
if ((cache_info->debug != MagickFalse) &&
4866
(QuantumTick((MagickOffsetType) nexus_info->region.y,cache_info->rows) != MagickFalse))
4867
(void) LogMagickEvent(CacheEvent,GetMagickModule(),
4868
"%s[%.20gx%.20g%+.20g%+.20g]",cache_info->filename,(double)
4869
nexus_info->region.width,(double) nexus_info->region.height,(double)
4870
nexus_info->region.x,(double) nexus_info->region.y);
4828
(QuantumTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
4829
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s[%lux%lu%+ld%+ld]",
4830
cache_info->filename,nexus_info->region.width,nexus_info->region.height,
4831
nexus_info->region.x,nexus_info->region.y);
4871
4832
return(MagickTrue);
5051
5012
assert(cache_info->signature == MagickSignature);
5052
5013
if (cache_info->type == UndefinedCache)
5053
5014
return((PixelPacket *) NULL);
5054
nexus_info->region=(*region);
5055
if ((cache_info->type != DiskCache) && (cache_info->type != PingCache) &&
5056
(image->clip_mask == (Image *) NULL) && (image->mask == (Image *) NULL))
5015
nexus_info->region.width=region->width == 0UL ? 1UL : region->width;
5016
nexus_info->region.height=region->height == 0UL ? 1UL : region->height;
5017
nexus_info->region.x=region->x;
5018
nexus_info->region.y=region->y;
5019
if ((cache_info->type != DiskCache) && (image->clip_mask == (Image *) NULL) &&
5020
(image->mask == (Image *) NULL))
5062
x=nexus_info->region.x+(ssize_t) nexus_info->region.width-1;
5063
y=nexus_info->region.y+(ssize_t) nexus_info->region.height-1;
5064
if (((nexus_info->region.x >= 0) && (x < (ssize_t) cache_info->columns) &&
5065
(nexus_info->region.y >= 0) && (y < (ssize_t) cache_info->rows)) &&
5026
x=nexus_info->region.x+nexus_info->region.width-1;
5027
y=nexus_info->region.y+nexus_info->region.height-1;
5028
if (((nexus_info->region.x >= 0) && (x < (long) cache_info->columns) &&
5029
(nexus_info->region.y >= 0) && (y < (long) cache_info->rows)) &&
5066
5030
((nexus_info->region.height == 1UL) ||
5067
5031
((nexus_info->region.x == 0) &&
5068
5032
((nexus_info->region.width == cache_info->columns) ||
5270
5234
cache_info=(CacheInfo *) image->cache;
5271
5235
id=GetOpenMPThreadId();
5272
assert(id < (ssize_t) cache_info->number_threads);
5236
assert(id < (long) cache_info->number_threads);
5273
5237
status=SyncAuthenticPixelCacheNexus(image,cache_info->nexus_info[id],
5275
5239
return(status);
5402
5366
q=cache_info->indexes+offset;
5403
for (y=0; y < (ssize_t) rows; y++)
5367
for (y=0; y < (long) rows; y++)
5405
5369
(void) CopyMagickMemory(q,p,(size_t) length);
5406
5370
p+=nexus_info->region.width;
5428
5392
number_pixels=(MagickSizeType) cache_info->columns*cache_info->rows;
5429
for (y=0; y < (ssize_t) rows; y++)
5393
for (y=0; y < (long) rows; y++)
5431
5395
count=WritePixelCacheRegion(cache_info,cache_info->offset+number_pixels*
5432
5396
sizeof(PixelPacket)+offset*sizeof(*p),length,
5436
5400
p+=nexus_info->region.width;
5437
5401
offset+=cache_info->columns;
5439
if (y < (ssize_t) rows)
5403
if (y < (long) rows)
5441
5405
ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
5442
5406
cache_info->cache_filename);
5450
5414
if ((cache_info->debug != MagickFalse) &&
5451
(QuantumTick((MagickOffsetType) nexus_info->region.y,cache_info->rows) != MagickFalse))
5452
(void) LogMagickEvent(CacheEvent,GetMagickModule(),
5453
"%s[%.20gx%.20g%+.20g%+.20g]",cache_info->filename,(double)
5454
nexus_info->region.width,(double) nexus_info->region.height,(double)
5455
nexus_info->region.x,(double) nexus_info->region.y);
5415
(QuantumTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
5416
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s[%lux%lu%+ld%+ld]",
5417
cache_info->filename,nexus_info->region.width,nexus_info->region.height,
5418
nexus_info->region.x,nexus_info->region.y);
5456
5419
return(MagickTrue);
5535
5498
q=cache_info->pixels+offset;
5536
for (y=0; y < (ssize_t) rows; y++)
5499
for (y=0; y < (long) rows; y++)
5538
5501
(void) CopyMagickMemory(q,p,(size_t) length);
5539
5502
p+=nexus_info->region.width;
5558
5521
length=number_pixels;
5561
for (y=0; y < (ssize_t) rows; y++)
5524
for (y=0; y < (long) rows; y++)
5563
5526
count=WritePixelCacheRegion(cache_info,cache_info->offset+offset*
5564
5527
sizeof(*p),length,(const unsigned char *) p);
5567
5530
p+=nexus_info->region.width;
5568
5531
offset+=cache_info->columns;
5570
if (y < (ssize_t) rows)
5533
if (y < (long) rows)
5572
5535
ThrowFileException(exception,CacheError,"UnableToWritePixelCache",
5573
5536
cache_info->cache_filename);
5581
5544
if ((cache_info->debug != MagickFalse) &&
5582
(QuantumTick((MagickOffsetType) nexus_info->region.y,cache_info->rows) != MagickFalse))
5583
(void) LogMagickEvent(CacheEvent,GetMagickModule(),
5584
"%s[%.20gx%.20g%+.20g%+.20g]",cache_info->filename,(double)
5585
nexus_info->region.width,(double) nexus_info->region.height,(double)
5586
nexus_info->region.x,(double) nexus_info->region.y);
5545
(QuantumTick(nexus_info->region.y,cache_info->rows) != MagickFalse))
5546
(void) LogMagickEvent(CacheEvent,GetMagickModule(),"%s[%lux%lu%+ld%+ld]",
5547
cache_info->filename,nexus_info->region.width,nexus_info->region.height,
5548
nexus_info->region.x,nexus_info->region.y);
5587
5549
return(MagickTrue);