summaryrefslogtreecommitdiff
path: root/PerlMagick/Magick.xs
diff options
context:
space:
mode:
Diffstat (limited to 'PerlMagick/Magick.xs')
-rw-r--r--PerlMagick/Magick.xs161
1 files changed, 93 insertions, 68 deletions
diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs
index 1a307eaa7..99b08f82a 100644
--- a/PerlMagick/Magick.xs
+++ b/PerlMagick/Magick.xs
@@ -23,7 +23,7 @@
% February 1997 %
% %
% %
-% Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2020 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
@@ -584,6 +584,7 @@ static struct
{"width", IntegerReference}, {"height", IntegerReference},
{"intensity-sigma", RealReference}, {"spatial-sigma", RealReference},
{"channel", MagickChannelOptions} } },
+ { "SortPixels", { { (const char *) NULL, NullReference } } },
};
static SplayTreeInfo
@@ -904,7 +905,7 @@ static Image *GetList(pTHX_ SV *reference,SV ***reference_vector,
*head,
*previous;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -1635,7 +1636,7 @@ static void SetAttribute(pTHX_ struct PackageInfo *info,Image *image,
long
index;
- Quantum
+ register Quantum
*q;
CacheView
@@ -1872,7 +1873,7 @@ static void SetAttribute(pTHX_ struct PackageInfo *info,Image *image,
PixelInfo
pixel;
- Quantum
+ register Quantum
*q;
CacheView
@@ -2424,7 +2425,7 @@ static ssize_t strEQcase(const char *p,const char *q)
char
c;
- ssize_t
+ register ssize_t
i;
for (i=0 ; (c=(*q)) != 0; i++)
@@ -2503,7 +2504,7 @@ Animate(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -2591,7 +2592,7 @@ Append(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -2828,10 +2829,10 @@ BlobToImage(ref,...)
Image
*image;
- char
+ register char
**p;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -2988,7 +2989,7 @@ ChannelFx(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -3226,7 +3227,7 @@ CLONE(ref,...)
PERL_UNUSED_VAR(ref);
if (magick_registry != (SplayTreeInfo *) NULL)
{
- Image
+ register Image
*p;
ResetSplayTreeIterator(magick_registry);
@@ -3373,7 +3374,7 @@ Compare(ref,...)
MetricType
metric;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -3563,7 +3564,7 @@ ComplexImages(ref)
Image
*image;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -3720,7 +3721,7 @@ CompareLayers(ref)
LayerMethod
method;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -3929,7 +3930,7 @@ Display(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -4020,7 +4021,7 @@ EvaluateImages(ref)
MagickEvaluateOperator
op;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -4224,7 +4225,7 @@ Features(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -4287,7 +4288,7 @@ Features(ref,...)
count=0;
for ( ; image; image=image->next)
{
- ssize_t
+ register ssize_t
j;
channel_features=GetImageFeatures(image,distance,exception);
@@ -4356,7 +4357,7 @@ Flatten(ref)
PixelInfo
background_color;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -4494,7 +4495,7 @@ Fx(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -4655,7 +4656,7 @@ Get(ref,...)
long
j;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -5065,6 +5066,9 @@ Get(ref,...)
{
j=info ? info->image_info->endian : image ? image->endian :
UndefinedEndian;
+ if (info)
+ if (info->image_info->endian == UndefinedEndian)
+ j=image->endian;
s=newSViv(j);
(void) sv_setpv(s,CommandOptionToMnemonic(MagickEndianOptions,j));
SvIOK_on(s);
@@ -5271,7 +5275,7 @@ Get(ref,...)
x,
y;
- const Quantum
+ register const Quantum
*p;
CacheView
@@ -5323,6 +5327,9 @@ Get(ref,...)
{
j=info ? info->image_info->interlace : image ? image->interlace :
UndefinedInterlace;
+ if (info)
+ if (info->image_info->interlace == UndefinedInterlace)
+ j=image->interlace;
s=newSViv(j);
(void) sv_setpv(s,CommandOptionToMnemonic(MagickInterlaceOptions,
j));
@@ -5479,6 +5486,9 @@ Get(ref,...)
{
j=info ? info->image_info->orientation : image ?
image->orientation : UndefinedOrientation;
+ if (info)
+ if (info->image_info->orientation == UndefinedOrientation)
+ j=image->orientation;
s=newSViv(j);
(void) sv_setpv(s,CommandOptionToMnemonic(MagickOrientationOptions,
j));
@@ -5537,7 +5547,7 @@ Get(ref,...)
x,
y;
- const Quantum
+ register const Quantum
*p;
if (image == (Image *) NULL)
@@ -5752,8 +5762,8 @@ Get(ref,...)
{
j=info ? info->image_info->units : image ? image->units :
UndefinedResolution;
- if (info && (info->image_info->units == UndefinedResolution))
- if (image)
+ if (info)
+ if (info->image_info->units == UndefinedResolution)
j=image->units;
if (j == UndefinedResolution)
s=newSVpv("undefined units",0);
@@ -6399,7 +6409,7 @@ Histogram(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -6515,10 +6525,10 @@ GetPixel(ref,...)
RectangleInfo
region;
- const Quantum
+ register const Quantum
*p;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -6716,7 +6726,7 @@ GetPixels(ref,...)
RectangleInfo
region;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -6870,14 +6880,18 @@ GetPixels(ref,...)
float
*pixels;
- pixels=(float *) AcquireQuantumMemory(strlen(map)*region.width,
+ MemoryInfo
+ *pixels_info;
+
+ pixels_info=AcquireVirtualMemory(strlen(map)*region.width,
region.height*sizeof(*pixels));
- if (pixels == (float *) NULL)
+ if (pixels_info == (MemoryInfo *) NULL)
{
ThrowPerlException(exception,ResourceLimitError,
"MemoryAllocationFailed",PackageName);
goto PerlException;
}
+ pixels=(float *) GetVirtualMemoryBlob(pixels_info);
status=ExportImagePixels(image,region.x,region.y,region.width,
region.height,map,FloatPixel,pixels,exception);
if (status == MagickFalse)
@@ -6888,21 +6902,25 @@ GetPixels(ref,...)
for (i=0; i < (ssize_t) (strlen(map)*region.width*region.height); i++)
PUSHs(sv_2mortal(newSVnv(pixels[i])));
}
- pixels=(float *) RelinquishMagickMemory(pixels);
+ pixels_info=RelinquishVirtualMemory(pixels_info);
}
else
{
+ MemoryInfo
+ *pixels_info;
+
Quantum
*pixels;
- pixels=(Quantum *) AcquireQuantumMemory(strlen(map)*region.width,
+ pixels_info=AcquireVirtualMemory(strlen(map)*region.width,
region.height*sizeof(*pixels));
- if (pixels == (Quantum *) NULL)
+ if (pixels_info == (MemoryInfo *) NULL)
{
ThrowPerlException(exception,ResourceLimitError,
"MemoryAllocationFailed",PackageName);
goto PerlException;
}
+ pixels=(Quantum *) GetVirtualMemoryBlob(pixels_info);
status=ExportImagePixels(image,region.x,region.y,region.width,
region.height,map,QuantumPixel,pixels,exception);
if (status == MagickFalse)
@@ -6913,7 +6931,7 @@ GetPixels(ref,...)
for (i=0; i < (ssize_t) (strlen(map)*region.width*region.height); i++)
PUSHs(sv_2mortal(newSViv(pixels[i])));
}
- pixels=(Quantum *) RelinquishMagickMemory(pixels);
+ pixels_info=RelinquishVirtualMemory(pixels_info);
}
PerlException:
@@ -6954,7 +6972,7 @@ ImageToBlob(ref,...)
*image,
*next;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -7073,7 +7091,7 @@ Layers(ref,...)
LayerMethod
method;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -7675,6 +7693,8 @@ Mogrify(ref,...)
WhiteBalanceImage = 304
BilateralBlur = 305
BilateralBlurImage = 306
+ SortPixels = 307
+ SortPixelsImage = 308
MogrifyRegion = 666
PPCODE:
{
@@ -7720,7 +7740,7 @@ Mogrify(ref,...)
geometry,
region_info;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -8727,10 +8747,10 @@ Mogrify(ref,...)
MagickBooleanType
sync;
- ssize_t
+ register ssize_t
x;
- Quantum
+ register Quantum
*q;
ssize_t
@@ -11585,16 +11605,16 @@ Mogrify(ref,...)
if ((flags & SigmaValue) == 0)
geometry_info.sigma=geometry_info.rho;
if ((flags & XiValue) == 0)
- geometry_info.xi=1.0*sqrt(geometry_info.rho*geometry_info.rho+
+ geometry_info.xi=2.0*sqrt(geometry_info.rho*geometry_info.rho+
geometry_info.sigma*geometry_info.sigma);
if ((flags & PsiValue) == 0)
- geometry_info.psi=0.25*sqrt(geometry_info.rho*geometry_info.rho+
+ geometry_info.psi=0.5*sqrt(geometry_info.rho*geometry_info.rho+
geometry_info.sigma*geometry_info.sigma);
}
if (attribute_flag[1] != 0)
- geometry_info.rho=(double) argument_list[1].integer_reference;
+ geometry_info.rho=argument_list[1].integer_reference;
if (attribute_flag[2] != 0)
- geometry_info.sigma=(double) argument_list[2].integer_reference;
+ geometry_info.sigma=argument_list[2].integer_reference;
if (attribute_flag[3] != 0)
geometry_info.xi=argument_list[3].real_reference;
if (attribute_flag[4] != 0)
@@ -11608,6 +11628,11 @@ Mogrify(ref,...)
(void) SetImageChannelMask(image,channel_mask);
break;
}
+ case 154: /* SortPixels */
+ {
+ (void) SortImagePixels(image,exception);
+ break;
+ }
}
if (next != (Image *) NULL)
(void) CatchImageException(next);
@@ -11685,7 +11710,7 @@ Montage(ref,...)
MontageInfo
*montage_info;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -12090,7 +12115,7 @@ Morph(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -12315,10 +12340,10 @@ Ping(ref,...)
MagickBooleanType
status;
- char
+ register char
**p;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -12611,7 +12636,7 @@ QueryColor(ref,...)
PixelInfo
color;
- ssize_t
+ register ssize_t
i;
SV
@@ -12697,7 +12722,7 @@ QueryColorname(ref,...)
PixelInfo
target_color;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -12764,7 +12789,7 @@ QueryFont(ref,...)
ExceptionInfo
*exception;
- ssize_t
+ register ssize_t
i;
SV
@@ -12909,7 +12934,7 @@ QueryFontMetrics(ref,...)
MagickStatusType
flags;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -13320,7 +13345,7 @@ QueryMultilineFontMetrics(ref,...)
MagickStatusType
flags;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -13667,7 +13692,7 @@ QueryFormat(ref,...)
ExceptionInfo
*exception;
- ssize_t
+ register ssize_t
i;
SV
@@ -13754,7 +13779,7 @@ QueryOption(ref,...)
ExceptionInfo
*exception;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -13832,10 +13857,10 @@ Read(ref,...)
MagickBooleanType
status;
- char
+ register char
**p;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -14034,7 +14059,7 @@ Remote(ref,...)
ExceptionInfo
*exception;
- ssize_t
+ register ssize_t
i;
SV
@@ -14089,7 +14114,7 @@ Set(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
struct PackageInfo
@@ -14168,10 +14193,10 @@ SetPixel(ref,...)
RectangleInfo
region;
- ssize_t
+ register ssize_t
i;
- Quantum
+ register Quantum
*q;
ssize_t
@@ -14325,7 +14350,7 @@ SetPixel(ref,...)
double
scale;
- ssize_t
+ register ssize_t
i;
i=0;
@@ -14416,10 +14441,10 @@ SetPixels(ref,...)
RectangleInfo
region;
- ssize_t
+ register ssize_t
i;
- Quantum
+ register Quantum
*q;
struct PackageInfo
@@ -14574,7 +14599,7 @@ SetPixels(ref,...)
double
scale;
- ssize_t
+ register ssize_t
i,
n,
number_pixels;
@@ -14669,7 +14694,7 @@ Smush(ref,...)
Image
*image;
- ssize_t
+ register ssize_t
i;
ssize_t
@@ -14884,7 +14909,7 @@ Statistics(ref,...)
count=0;
for ( ; image; image=image->next)
{
- size_t
+ register size_t
i;
channel_statistics=GetImageStatistics(image,exception);
@@ -15010,7 +15035,7 @@ Write(ref,...)
*image,
*next;
- ssize_t
+ register ssize_t
i;
ssize_t