aboutsummaryrefslogtreecommitdiffstats
path: root/common/jpeg/jsimd.c
diff options
context:
space:
mode:
authorDRC <dcommander@users.sourceforge.net>2009-04-05 21:51:25 +0000
committerDRC <dcommander@users.sourceforge.net>2009-04-05 21:51:25 +0000
commit80bc60b9cf49153a22ff57e243f75064d4efa9ab (patch)
tree632f8f4d258c8e35a1299132ea14a5384b5cf713 /common/jpeg/jsimd.c
parentec36251df8fbcaedc5327ce0e3cd1c548e0a05ba (diff)
downloadtigervnc-80bc60b9cf49153a22ff57e243f75064d4efa9ab.tar.gz
tigervnc-80bc60b9cf49153a22ff57e243f75064d4efa9ab.zip
Add colorspace extensions to merged upsampling routines
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3756 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'common/jpeg/jsimd.c')
-rw-r--r--common/jpeg/jsimd.c74
1 files changed, 70 insertions, 4 deletions
diff --git a/common/jpeg/jsimd.c b/common/jpeg/jsimd.c
index 2c49a6bd..861309ab 100644
--- a/common/jpeg/jsimd.c
+++ b/common/jpeg/jsimd.c
@@ -461,12 +461,45 @@ jsimd_h2v2_merged_upsample (j_decompress_ptr cinfo,
JSAMPARRAY output_buf)
{
#ifdef WITH_SIMD
+ void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY);
+ void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY);
+ switch(cinfo->out_color_space)
+ {
+ case JCS_EXT_RGB:
+ sse2fct=jsimd_h2v2_extrgb_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_extrgb_merged_upsample_mmx;
+ break;
+ case JCS_EXT_RGBX:
+ sse2fct=jsimd_h2v2_extrgbx_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_extrgbx_merged_upsample_mmx;
+ break;
+ case JCS_EXT_BGR:
+ sse2fct=jsimd_h2v2_extbgr_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_extbgr_merged_upsample_mmx;
+ break;
+ case JCS_EXT_BGRX:
+ sse2fct=jsimd_h2v2_extbgrx_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_extbgrx_merged_upsample_mmx;
+ break;
+ case JCS_EXT_XBGR:
+ sse2fct=jsimd_h2v2_extxbgr_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_extxbgr_merged_upsample_mmx;
+ break;
+ case JCS_EXT_XRGB:
+ sse2fct=jsimd_h2v2_extxrgb_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_extxrgb_merged_upsample_mmx;
+ break;
+ default:
+ sse2fct=jsimd_h2v2_merged_upsample_sse2;
+ mmxfct=jsimd_h2v2_merged_upsample_mmx;
+ break;
+ }
if ((simd_support & JSIMD_SSE2) &&
IS_ALIGNED_SSE(jconst_merged_upsample_sse2))
- jsimd_h2v2_merged_upsample_sse2(cinfo->output_width, input_buf,
+ sse2fct(cinfo->output_width, input_buf,
in_row_group_ctr, output_buf);
else if (simd_support & JSIMD_MMX)
- jsimd_h2v2_merged_upsample_mmx(cinfo->output_width, input_buf,
+ mmxfct(cinfo->output_width, input_buf,
in_row_group_ctr, output_buf);
#endif
}
@@ -478,12 +511,45 @@ jsimd_h2v1_merged_upsample (j_decompress_ptr cinfo,
JSAMPARRAY output_buf)
{
#ifdef WITH_SIMD
+ void (*sse2fct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY);
+ void (*mmxfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY);
+ switch(cinfo->out_color_space)
+ {
+ case JCS_EXT_RGB:
+ sse2fct=jsimd_h2v1_extrgb_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_extrgb_merged_upsample_mmx;
+ break;
+ case JCS_EXT_RGBX:
+ sse2fct=jsimd_h2v1_extrgbx_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_extrgbx_merged_upsample_mmx;
+ break;
+ case JCS_EXT_BGR:
+ sse2fct=jsimd_h2v1_extbgr_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_extbgr_merged_upsample_mmx;
+ break;
+ case JCS_EXT_BGRX:
+ sse2fct=jsimd_h2v1_extbgrx_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_extbgrx_merged_upsample_mmx;
+ break;
+ case JCS_EXT_XBGR:
+ sse2fct=jsimd_h2v1_extxbgr_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_extxbgr_merged_upsample_mmx;
+ break;
+ case JCS_EXT_XRGB:
+ sse2fct=jsimd_h2v1_extxrgb_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_extxrgb_merged_upsample_mmx;
+ break;
+ default:
+ sse2fct=jsimd_h2v1_merged_upsample_sse2;
+ mmxfct=jsimd_h2v1_merged_upsample_mmx;
+ break;
+ }
if ((simd_support & JSIMD_SSE2) &&
IS_ALIGNED_SSE(jconst_merged_upsample_sse2))
- jsimd_h2v1_merged_upsample_sse2(cinfo->output_width, input_buf,
+ sse2fct(cinfo->output_width, input_buf,
in_row_group_ctr, output_buf);
else if (simd_support & JSIMD_MMX)
- jsimd_h2v1_merged_upsample_mmx(cinfo->output_width, input_buf,
+ mmxfct(cinfo->output_width, input_buf,
in_row_group_ctr, output_buf);
#endif
}