diff options
author | DRC <dcommander@users.sourceforge.net> | 2009-04-05 21:51:25 +0000 |
---|---|---|
committer | DRC <dcommander@users.sourceforge.net> | 2009-04-05 21:51:25 +0000 |
commit | 80bc60b9cf49153a22ff57e243f75064d4efa9ab (patch) | |
tree | 632f8f4d258c8e35a1299132ea14a5384b5cf713 /common/jpeg/jsimd.c | |
parent | ec36251df8fbcaedc5327ce0e3cd1c548e0a05ba (diff) | |
download | tigervnc-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.c | 74 |
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 } |