AltiVec SIMD implementation of RGB-to-Grayscale color conversion
git-svn-id: svn://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1471 632fc199-4ca6-4c93-a231-07263d6284db
This commit is contained in:
@@ -61,6 +61,19 @@ jsimd_can_rgb_ycc (void)
|
||||
GLOBAL(int)
|
||||
jsimd_can_rgb_gray (void)
|
||||
{
|
||||
init_simd();
|
||||
|
||||
/* The code is optimised for these values only */
|
||||
if (BITS_IN_JSAMPLE != 8)
|
||||
return 0;
|
||||
if (sizeof(JDIMENSION) != 4)
|
||||
return 0;
|
||||
if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
|
||||
return 0;
|
||||
|
||||
if (simd_support & JSIMD_ALTIVEC)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -119,6 +132,37 @@ jsimd_rgb_gray_convert (j_compress_ptr cinfo,
|
||||
JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
|
||||
JDIMENSION output_row, int num_rows)
|
||||
{
|
||||
void (*altivecfct)(JDIMENSION, JSAMPARRAY, JSAMPIMAGE, JDIMENSION, int);
|
||||
|
||||
switch(cinfo->in_color_space) {
|
||||
case JCS_EXT_RGB:
|
||||
altivecfct=jsimd_extrgb_gray_convert_altivec;
|
||||
break;
|
||||
case JCS_EXT_RGBX:
|
||||
case JCS_EXT_RGBA:
|
||||
altivecfct=jsimd_extrgbx_gray_convert_altivec;
|
||||
break;
|
||||
case JCS_EXT_BGR:
|
||||
altivecfct=jsimd_extbgr_gray_convert_altivec;
|
||||
break;
|
||||
case JCS_EXT_BGRX:
|
||||
case JCS_EXT_BGRA:
|
||||
altivecfct=jsimd_extbgrx_gray_convert_altivec;
|
||||
break;
|
||||
case JCS_EXT_XBGR:
|
||||
case JCS_EXT_ABGR:
|
||||
altivecfct=jsimd_extxbgr_gray_convert_altivec;
|
||||
break;
|
||||
case JCS_EXT_XRGB:
|
||||
case JCS_EXT_ARGB:
|
||||
altivecfct=jsimd_extxrgb_gray_convert_altivec;
|
||||
break;
|
||||
default:
|
||||
altivecfct=jsimd_rgb_gray_convert_altivec;
|
||||
break;
|
||||
}
|
||||
|
||||
altivecfct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
|
||||
}
|
||||
|
||||
GLOBAL(void)
|
||||
|
||||
Reference in New Issue
Block a user