13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 27ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy dedicated to making software imaging solutions freely available. 45cce74b1e47afda3614fe1775353f204e17b5ecbcristy 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy You may not use this file except in compliance with the License. 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy obtain a copy of the License at 75cce74b1e47afda3614fe1775353f204e17b5ecbcristy 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy http://www.imagemagick.org/script/license.php 95cce74b1e47afda3614fe1775353f204e17b5ecbcristy 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Unless required by applicable law or agreed to in writing, software 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy distributed under the License is distributed on an "AS IS" BASIS, 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy See the License for the specific language governing permissions and 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy limitations under the License. 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickCore image resampling private methods. 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1883bceaa5d7a1196e05c1ccba443f90f4b032fca6Cristy#ifndef MAGICKCORE_RESAMPLE_PRIVATE_H 1983bceaa5d7a1196e05c1ccba443f90f4b032fca6Cristy#define MAGICKCORE_RESAMPLE_PRIVATE_H 203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 216398ec777e91813b64767e25358b7062a7de56cbcristy#include "MagickCore/thread-private.h" 226398ec777e91813b64767e25358b7062a7de56cbcristy 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristyextern "C" { 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic inline ResampleFilter **DestroyResampleFilterThreadSet( 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ResampleFilter **filter) 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 30bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(filter != (ResampleFilter **) NULL); 3492923f1e6fbf86ce3d345bf8e907e9d0aab70808cristy for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filter[i] != (ResampleFilter *) NULL) 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filter[i]=DestroyResampleFilter(filter[i]); 37a64b85d7873d5e540fe6e2941aa98ec7653a4e2dcristy filter=(ResampleFilter **) RelinquishMagickMemory(filter); 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(filter); 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic inline ResampleFilter **AcquireResampleFilterThreadSet( 42b2a11ae782e3f5ba1c020d944bc5ff8382d378fecristy const Image *image,const VirtualPixelMethod method, 43b2a11ae782e3f5ba1c020d944bc5ff8382d378fecristy const MagickBooleanType interpolate,ExceptionInfo *exception) 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 45bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy i; 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ResampleFilter 493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy **filter; 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 51bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy size_t 523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy number_threads; 533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 5492923f1e6fbf86ce3d345bf8e907e9d0aab70808cristy number_threads=(size_t) GetMagickResourceLimit(ThreadResource); 55a64b85d7873d5e540fe6e2941aa98ec7653a4e2dcristy filter=(ResampleFilter **) AcquireQuantumMemory(number_threads, 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy sizeof(*filter)); 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filter == (ResampleFilter **) NULL) 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return((ResampleFilter **) NULL); 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(filter,0,number_threads*sizeof(*filter)); 60bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (i=0; i < (ssize_t) number_threads; i++) 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy filter[i]=AcquireResampleFilter(image,exception); 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (filter[i] == (ResampleFilter *) NULL) 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(DestroyResampleFilterThreadSet(filter)); 65b65a5b83785ab7b6a8f6fc2d47ba5dca776143bbcristy if (method != UndefinedVirtualPixelMethod) 66b65a5b83785ab7b6a8f6fc2d47ba5dca776143bbcristy (void) SetResampleFilterVirtualPixelMethod(filter[i],method); 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (interpolate != MagickFalse) 68aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy SetResampleFilter(filter[i],PointFilter); 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(filter); 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(__cplusplus) || defined(c_plusplus) 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 78