зеркало из https://github.com/mozilla/pjs.git
Code to fastpath Alpha PNGs in LCMS - part of bug 445552. r=vlad
This commit is contained in:
Родитель
47b7be01c1
Коммит
237fe615c6
|
@ -615,8 +615,13 @@ void MatrixShaperXFORMFloat(_LPcmsTRANSFORM p,
|
||||||
register LPBYTE In, Out;
|
register LPBYTE In, Out;
|
||||||
register unsigned int i;
|
register unsigned int i;
|
||||||
LPMATSHAPER MatShaper;
|
LPMATSHAPER MatShaper;
|
||||||
|
unsigned Increment;
|
||||||
|
|
||||||
|
// We support a very limited number of configurations for the floatpath
|
||||||
|
CMSASSERT(p->InputFormat == p->OutputFormat);
|
||||||
|
CMSASSERT((p->InputFormat == TYPE_RGB_8) || (p->InputFormat == TYPE_RGBA_8));
|
||||||
|
|
||||||
|
Increment = (p->InputFormat == TYPE_RGB_8) ? 3 : 4;
|
||||||
In = (LPBYTE) in;
|
In = (LPBYTE) in;
|
||||||
Out = (LPBYTE) out;
|
Out = (LPBYTE) out;
|
||||||
MatShaper = p -> SmeltMatShaper;
|
MatShaper = p -> SmeltMatShaper;
|
||||||
|
@ -758,8 +763,8 @@ void MatrixShaperXFORMFloat(_LPcmsTRANSFORM p,
|
||||||
Out[2] = RGB_16_TO_8((WORD)tmp[2]);
|
Out[2] = RGB_16_TO_8((WORD)tmp[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
In += 3;
|
In += Increment;
|
||||||
Out += 3;
|
Out += Increment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -542,20 +542,24 @@ info_callback(png_structp png_ptr, png_infop info_ptr)
|
||||||
}
|
}
|
||||||
if (decoder->mInProfile && gfxPlatform::GetCMSOutputProfile()) {
|
if (decoder->mInProfile && gfxPlatform::GetCMSOutputProfile()) {
|
||||||
PRUint32 outType;
|
PRUint32 outType;
|
||||||
|
PRUint32 dwFlags = 0;
|
||||||
|
|
||||||
if (color_type & PNG_COLOR_MASK_ALPHA || num_trans)
|
if (color_type & PNG_COLOR_MASK_ALPHA || num_trans)
|
||||||
outType = TYPE_RGBA_8;
|
outType = TYPE_RGBA_8;
|
||||||
else
|
else
|
||||||
outType = TYPE_RGB_8;
|
outType = TYPE_RGB_8;
|
||||||
|
|
||||||
|
/* Determine if we can use the optimized floating point path. */
|
||||||
|
if ((inType == outType) &&
|
||||||
|
((inType == TYPE_RGB_8) || (inType == TYPE_RGBA_8)))
|
||||||
|
dwFlags |= cmsFLAGS_FLOATSHAPER;
|
||||||
|
|
||||||
decoder->mTransform = cmsCreateTransform(decoder->mInProfile,
|
decoder->mTransform = cmsCreateTransform(decoder->mInProfile,
|
||||||
inType,
|
inType,
|
||||||
gfxPlatform::GetCMSOutputProfile(),
|
gfxPlatform::GetCMSOutputProfile(),
|
||||||
outType,
|
outType,
|
||||||
intent,
|
intent,
|
||||||
((inType == TYPE_RGB_8) &&
|
dwFlags);
|
||||||
(outType == TYPE_RGB_8))
|
|
||||||
? cmsFLAGS_FLOATSHAPER : 0);
|
|
||||||
} else {
|
} else {
|
||||||
png_set_gray_to_rgb(png_ptr);
|
png_set_gray_to_rgb(png_ptr);
|
||||||
if (gfxPlatform::GetCMSMode() == eCMSMode_All) {
|
if (gfxPlatform::GetCMSMode() == eCMSMode_All) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче