diff options
author | David Schleef <ds@schleef.org> | 2006-09-29 06:21:32 +0000 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2006-09-29 06:21:32 +0000 |
commit | 36374a87273e4ee08495d1b70ccc7f98ee09e8a5 (patch) | |
tree | f3586c01d86aa1cb32d36412c930547831b08838 /liboil/ref | |
parent | 16bdc4c6d094d5a3a140aded5accf7ddc1a4e5bd (diff) | |
download | liboil-36374a87273e4ee08495d1b70ccc7f98ee09e8a5.tar.gz |
* liboil/i386/resample.c:
Disable some (apparently) broken code.
* liboil/i386/wavelet.c:
Some MMX code.
* liboil/liboilclasses.h:
* liboil/liboilfuncs-04.h:
* liboil/liboilfuncs.h:
* liboil/liboiltrampolines.c:
updated for new classes.
* liboil/liboilparameter.h:
Export oil_param_from_string().
* liboil/liboilprototype.c:
* liboil/liboiltest.c:
Handle 'np2' notation.
* liboil/ref/rgb.c:
* liboil/ref/wavelet.c:
Fix a test bug, add some classes.
* testsuite/proto3.c:
Use oil_param_from_string() in library.
Diffstat (limited to 'liboil/ref')
-rw-r--r-- | liboil/ref/rgb.c | 26 | ||||
-rw-r--r-- | liboil/ref/wavelet.c | 89 |
2 files changed, 114 insertions, 1 deletions
diff --git a/liboil/ref/rgb.c b/liboil/ref/rgb.c index 280361f..8f53ec2 100644 --- a/liboil/ref/rgb.c +++ b/liboil/ref/rgb.c @@ -30,6 +30,7 @@ #endif #include <liboil/liboilfunction.h> +#include <liboil/liboilcolorspace.h> /** * oil_rgb2bgr: @@ -51,6 +52,15 @@ OIL_DEFINE_CLASS (rgb2bgr, "uint8_t *d_3xn, uint8_t* s_3xn, int n"); * to 32-bit RGBA pixels in RGBARGBA order. */ OIL_DEFINE_CLASS (rgb2rgba, "uint8_t *d_4xn, uint8_t* s_3xn, int n"); +/** + * oil_rgb565_to_argb: + * @d: + * @s: + * @n: + * + * Converts arrays of 16-bit RGB565 pixels to 32-bit ARGB pixels. + */ +OIL_DEFINE_CLASS (rgb565_to_argb, "uint32_t *d, uint16_t* s, int n"); static void rgb2bgr_ref (uint8_t *dest, const uint8_t* src, int n) @@ -88,3 +98,19 @@ rgb2rgba_ref (uint8_t *dest, const uint8_t* src, int n) OIL_DEFINE_IMPL_REF (rgb2rgba_ref, rgb2rgba); + +void +rgb565_to_argb_ref (uint32_t *d, uint16_t* s, int n) +{ + int i; + int r,g,b; + + for (i = 0; i < n; i++) { + r = (s[i] >> 8) & 0xf8; + g = (s[i] >> 3) & 0xfc; + b = (s[i] << 3) & 0xf8; + d[i] = oil_argb(255, r | (r>>5), g | (g>>6), b | (b>>5)); + } +} +OIL_DEFINE_IMPL_REF (rgb565_to_argb_ref, rgb565_to_argb); + diff --git a/liboil/ref/wavelet.c b/liboil/ref/wavelet.c index abb3262..3c717b1 100644 --- a/liboil/ref/wavelet.c +++ b/liboil/ref/wavelet.c @@ -10,7 +10,7 @@ wavelet_test (OilTest *test) int16_t *data = (int16_t *)oil_test_get_source_data (test, OIL_ARG_SRC1); int i; - for(i=0;i<test->n*2;i++){ + for(i=0;i<test->n;i++){ data[i] = oil_rand_u8(); } } @@ -18,8 +18,12 @@ wavelet_test (OilTest *test) OIL_DEFINE_CLASS_FULL (deinterleave, "int16_t *d_2xn, int16_t *s_2xn, int n", wavelet_test); +OIL_DEFINE_CLASS (deinterleave2_s16, + "int16_t *d1_n, int16_t *d2_n, int16_t *s_2xn, int n"); OIL_DEFINE_CLASS_FULL (interleave, "int16_t *d_2xn, int16_t *s_2xn, int n", wavelet_test); +OIL_DEFINE_CLASS (interleave2_s16, + "int16_t *d_2xn, int16_t *s1_n, int16_t *s2_n, int n"); OIL_DEFINE_CLASS_FULL (synth_daub97, "int16_t *d_2xn, int16_t *s_2xn, int n", wavelet_test); OIL_DEFINE_CLASS_FULL (split_daub97, @@ -36,6 +40,15 @@ OIL_DEFINE_CLASS_FULL (split_135, "int16_t *d_2xn, int16_t *s_2xn, int n", wavelet_test); OIL_DEFINE_CLASS_FULL (synth_135, "int16_t *d_2xn, int16_t *s_2xn, int n", wavelet_test); +OIL_DEFINE_CLASS_FULL (mas2_add_s16, + "int16_t *d, int16_t *s1, int16_t *s2_np1, int16_t *s3_2, int16_t *s4_2, " + "int n", wavelet_test); +OIL_DEFINE_CLASS_FULL (mas4_add_s16, + "int16_t *d, int16_t *s1, int16_t *s2_np3, int16_t *s3_4, int16_t *s4_2, " + "int n", wavelet_test); +OIL_DEFINE_CLASS_FULL (mas8_add_s16, + "int16_t *d, int16_t *s1, int16_t *s2_np7, int16_t *s3_8, int16_t *s4_2, " + "int n", wavelet_test); void deinterleave_ref (int16_t *d_2xn, int16_t *s_2xn, int n) @@ -50,6 +63,18 @@ deinterleave_ref (int16_t *d_2xn, int16_t *s_2xn, int n) OIL_DEFINE_IMPL_REF (deinterleave_ref, deinterleave); void +deinterleave2_s16_ref (int16_t *d1_n, int16_t *d2_n, int16_t *s_2xn, int n) +{ + int i; + + for(i=0;i<n;i++) { + d1_n[i] = s_2xn[2*i]; + d2_n[i] = s_2xn[2*i + 1]; + } +} +OIL_DEFINE_IMPL_REF (deinterleave2_s16_ref, deinterleave2_s16); + +void interleave_ref (int16_t *d_2xn, int16_t *s_2xn, int n) { int i; @@ -62,6 +87,18 @@ interleave_ref (int16_t *d_2xn, int16_t *s_2xn, int n) OIL_DEFINE_IMPL_REF (interleave_ref, interleave); void +interleave2_s16_ref (int16_t *d_2xn, int16_t *s1_n, int16_t *s2_n, int n) +{ + int i; + + for(i=0;i<n;i++) { + d_2xn[2*i] = s1_n[i]; + d_2xn[2*i + 1] = s2_n[i]; + } +} +OIL_DEFINE_IMPL_REF (interleave2_s16_ref, interleave2_s16); + +void synth_daub97_ref (int16_t *d_2xn, int16_t *s_2xn, int n) { int i; @@ -440,3 +477,53 @@ lift_sub_135_ref (int16_t *d, int16_t *s1, int16_t *s2, int16_t *s3, OIL_DEFINE_IMPL_REF (lift_sub_135_ref, lift_sub_135); +void +mas2_add_s16_ref(int16_t *d1, int16_t *s1, int16_t *s2, int16_t *s3_2, + int16_t *s4_2, int n) +{ + int i; + int x; + + for(i=0;i<n;i++){ + x = s4_2[0] + s2[i]*s3_2[0] + s2[i+1]*s3_2[1]; + x >>= s4_2[1]; + d1[i] = s1[i] + x; + } +} +OIL_DEFINE_IMPL_REF (mas2_add_s16_ref, mas2_add_s16); + +void +mas4_add_s16_ref(int16_t *d1, int16_t *s1, int16_t *s2, int16_t *s3_4, + int16_t *s4_2, int n) +{ + int i; + int x; + + for(i=0;i<n;i++){ + x = s4_2[0] + s2[i]*s3_4[0] + s2[i+1]*s3_4[1] + s2[i+2]*s3_4[2] + + s2[i+3]*s3_4[3]; + x >>= s4_2[1]; + d1[i] = s1[i] + x; + } +} +OIL_DEFINE_IMPL_REF (mas4_add_s16_ref, mas4_add_s16); + +void +mas8_add_s16_ref(int16_t *d1, int16_t *s1, int16_t *s2, int16_t *s3_8, + int16_t *s4_2, int n) +{ + int i; + int j; + int x; + + for(i=0;i<n;i++){ + x = s4_2[0]; + for(j=0;j<8;j++){ + x += s2[i+j]*s3_8[j]; + } + x >>= s4_2[1]; + d1[i] = s1[i] + x; + } +} +OIL_DEFINE_IMPL_REF (mas8_add_s16_ref, mas8_add_s16); + |