summaryrefslogtreecommitdiff
path: root/liboil/ref
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2006-09-29 06:21:32 +0000
committerDavid Schleef <ds@schleef.org>2006-09-29 06:21:32 +0000
commit36374a87273e4ee08495d1b70ccc7f98ee09e8a5 (patch)
treef3586c01d86aa1cb32d36412c930547831b08838 /liboil/ref
parent16bdc4c6d094d5a3a140aded5accf7ddc1a4e5bd (diff)
downloadliboil-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.c26
-rw-r--r--liboil/ref/wavelet.c89
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);
+