MagickExport CacheView *AcquireVirtualCacheView(const Image *image, ExceptionInfo *exception) { CacheView *restrict cache_view; assert(image != (Image *) NULL); assert(image->signature == MagickSignature); if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); (void) exception; cache_view=(CacheView *) MagickAssumeAligned(AcquireAlignedMemory(1, sizeof(*cache_view))); if (cache_view == (CacheView *) NULL) ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); (void) ResetMagickMemory(cache_view,0,sizeof(*cache_view)); cache_view->image=ReferenceImage((Image *) image); cache_view->number_threads=GetOpenMPMaximumThreads(); if (GetMagickResourceLimit(ThreadResource) > cache_view->number_threads) cache_view->number_threads=(size_t) GetMagickResourceLimit(ThreadResource); if (cache_view->number_threads == 0) cache_view->number_threads=1; cache_view->nexus_info=AcquirePixelCacheNexus(cache_view->number_threads); cache_view->virtual_pixel_method=GetImageVirtualPixelMethod(image); cache_view->debug=IsEventLogging(); cache_view->signature=MagickSignature; if (cache_view->nexus_info == (NexusInfo **) NULL) ThrowFatalException(CacheFatalError,"UnableToAcquireCacheView"); return(cache_view); }
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % C l o n e C a c h e V i e w % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % CloneCacheView() makes an exact copy of the specified cache view. % % The format of the CloneCacheView method is: % % CacheView *CloneCacheView(const CacheView *cache_view) % % A description of each parameter follows: % % o cache_view: the cache view. % */ MagickExport CacheView *CloneCacheView(const CacheView *cache_view) { CacheView *clone_view; assert(cache_view != (CacheView *) NULL); assert(cache_view->signature == MagickSignature); if (cache_view->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", cache_view->image->filename); clone_view=(CacheView *) AcquireMagickMemory(sizeof(*clone_view)); if (clone_view == (CacheView *) NULL) ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); (void) ResetMagickMemory(clone_view,0,sizeof(*clone_view)); clone_view->image=ReferenceImage(cache_view->image); clone_view->number_threads=cache_view->number_threads; clone_view->nexus_info=AcquirePixelCacheNexus(cache_view->number_threads); clone_view->virtual_pixel_method=cache_view->virtual_pixel_method; clone_view->debug=cache_view->debug; clone_view->signature=MagickSignature; return(clone_view); }