summaryrefslogtreecommitdiff
path: root/liboil/ref
diff options
context:
space:
mode:
authorDavid Schleef <ds@ginger.bigkitten.com>2008-02-13 02:27:30 -0800
committerDavid Schleef <ds@ginger.bigkitten.com>2008-02-13 02:27:30 -0800
commit90c27e2a2ef4c51fa4d18c8d2cb0c8b0fd92454f (patch)
treefb0d40d085a0aaeb8dbaf339d46054ffabc2eaac /liboil/ref
parent4a69d69703a542539978ec3b58a767de5d020147 (diff)
downloadliboil-90c27e2a2ef4c51fa4d18c8d2cb0c8b0fd92454f.tar.gz
Copy more functions from schro.
Diffstat (limited to 'liboil/ref')
-rw-r--r--liboil/ref/mas.c20
-rw-r--r--liboil/ref/wavelet.c107
2 files changed, 127 insertions, 0 deletions
diff --git a/liboil/ref/mas.c b/liboil/ref/mas.c
index 1ec6234..e098bc2 100644
--- a/liboil/ref/mas.c
+++ b/liboil/ref/mas.c
@@ -250,6 +250,8 @@ OIL_DEFINE_CLASS_FULL (mas12across_addc_rshift_u8,
OIL_DEFINE_CLASS_FULL (mas8_addc_rshift_decim2_u8,
"uint8_t *d, uint8_t *s1_2xnp9, int16_t *s2_8, "
"int16_t *s3_2, int n", mas8_test);
+OIL_DEFINE_CLASS_FULL (mas8_across_u8, "uint8_t *d, uint8_t *s1_nx8, int sstr1, "
+ "int16_t *s2_8, int16_t *s3_2, int n", mas8_u8_test);
void
mas2_add_s16_ref(int16_t *d1, int16_t *s1, int16_t *s2, int16_t *s3_2,
@@ -421,6 +423,24 @@ mas8_u8_sym_l15_ref (uint8_t *d, const uint8_t *s1_np7,
}
OIL_DEFINE_IMPL_REF (mas8_u8_sym_l15_ref, mas8_u8_sym_l15);
+void
+mas8_across_u8_ref (uint8_t *d, uint8_t *s1_nx8, int sstr1,
+ int16_t *s2_8, int16_t *s3_2, int n)
+{
+ int i;
+ int j;
+ int x;
+ for(i=0;i<n;i++){
+ x = s3_2[0];
+ for(j=0;j<8;j++){
+ x += OIL_GET(s1_nx8, i*sizeof(uint8_t) + j*sstr1, uint8_t)*s2_8[j];
+ }
+ x >>= s3_2[1];
+ d[i] = CLAMP(x,0,255);
+ }
+}
+OIL_DEFINE_IMPL_REF (mas8_across_u8_ref, mas8_across_u8);
+
static void
mas12_addc_rshift_decim2_u8_ref (uint8_t *dest, const uint8_t *src,
const int16_t *taps, const int16_t *offsetshift, int n)
diff --git a/liboil/ref/wavelet.c b/liboil/ref/wavelet.c
index b7e8175..bb49eca 100644
--- a/liboil/ref/wavelet.c
+++ b/liboil/ref/wavelet.c
@@ -39,6 +39,20 @@ lshift_test (OilTest *test)
data = (int16_t *)oil_test_get_source_data (test, OIL_ARG_SRC2);
data[0] = 12;
}
+
+static void
+combine4_test (OilTest *test)
+{
+ int16_t *data;
+
+ data = (int16_t *)oil_test_get_source_data (test, OIL_ARG_SRC5);
+ data[0] = 4;
+ data[1] = 4;
+ data[2] = 4;
+ data[3] = 4;
+ data[4] = 8;
+ data[5] = 4;
+}
OIL_DEFINE_CLASS_FULL (deinterleave,
"int16_t *d_2xn, int16_t *s_2xn, int n", wavelet_test);
@@ -82,6 +96,15 @@ OIL_DEFINE_CLASS (multiply_and_acc_16xn_s16_u8, "int16_t *i1_16xn, int is1, "
"int16_t *s1_16xn, int ss1, uint8_t *s2_16xn, int ss2, int n");
OIL_DEFINE_CLASS (multiply_and_acc_24xn_s16_u8, "int16_t *i1_24xn, int is1, "
"int16_t *s1_24xn, int ss1, uint8_t *s2_24xn, int ss2, int n");
+OIL_DEFINE_CLASS_FULL (combine4_8xn_u8, "uint8_t *d_8xn, int ds1, "
+ "uint8_t *s1_8xn, int ss1, uint8_t *s2_8xn, int ss2, uint8_t *s3_8xn, "
+ "int ss3, uint8_t *s4_8xn, int ss4, int16_t *s5_6, int n", combine4_test);
+OIL_DEFINE_CLASS_FULL (combine4_12xn_u8, "uint8_t *d_12xn, int ds1, "
+ "uint8_t *s1_12xn, int ss1, uint8_t *s2_12xn, int ss2, uint8_t *s3_12xn, "
+ "int ss3, uint8_t *s4_12xn, int ss4, int16_t *s5_6, int n", combine4_test);
+OIL_DEFINE_CLASS_FULL (combine4_16xn_u8, "uint8_t *d_16xn, int ds1, "
+ "uint8_t *s1_16xn, int ss1, uint8_t *s2_16xn, int ss2, uint8_t *s3_16xn, "
+ "int ss3, uint8_t *s4_16xn, int ss4, int16_t *s5_6, int n", combine4_test);
void
deinterleave_ref (int16_t *d_2xn, int16_t *s_2xn, int n)
@@ -629,3 +652,87 @@ multiply_and_acc_24xn_s16_u8_ref (int16_t *i1, int is1, int16_t *s1,
OIL_DEFINE_IMPL_REF (multiply_and_acc_24xn_s16_u8_ref,
multiply_and_acc_24xn_s16_u8);
+void
+combine4_8xn_u8_ref (uint8_t *d, int ds1,
+ uint8_t *s1, int ss1,
+ uint8_t *s2, int ss2,
+ uint8_t *s3, int ss3,
+ uint8_t *s4, int ss4,
+ int16_t *s5_6, int n)
+{
+ int i;
+ int j;
+ for(j=0;j<n;j++){
+ for(i=0;i<8;i++){
+ int x = 0;
+ x += s5_6[0] * s1[i];
+ x += s5_6[1] * s2[i];
+ x += s5_6[2] * s3[i];
+ x += s5_6[3] * s4[i];
+ d[i] = (x + s5_6[4]) >> s5_6[5];
+ }
+ s1 += ss1;
+ s2 += ss2;
+ s3 += ss3;
+ s4 += ss4;
+ d += ds1;
+ }
+}
+OIL_DEFINE_IMPL_REF (combine4_8xn_u8_ref, combine4_8xn_u8);
+
+void
+combine4_12xn_u8_ref (uint8_t *d, int ds1,
+ uint8_t *s1, int ss1,
+ uint8_t *s2, int ss2,
+ uint8_t *s3, int ss3,
+ uint8_t *s4, int ss4,
+ int16_t *s5_6, int n)
+{
+ int i;
+ int j;
+ for(j=0;j<n;j++){
+ for(i=0;i<12;i++){
+ int x = 0;
+ x += s5_6[0] * s1[i];
+ x += s5_6[1] * s2[i];
+ x += s5_6[2] * s3[i];
+ x += s5_6[3] * s4[i];
+ d[i] = (x + s5_6[4]) >> s5_6[5];
+ }
+ s1 += ss1;
+ s2 += ss2;
+ s3 += ss3;
+ s4 += ss4;
+ d += ds1;
+ }
+}
+OIL_DEFINE_IMPL_REF (combine4_12xn_u8_ref, combine4_12xn_u8);
+
+void
+combine4_16xn_u8_ref (uint8_t *d, int ds1,
+ uint8_t *s1, int ss1,
+ uint8_t *s2, int ss2,
+ uint8_t *s3, int ss3,
+ uint8_t *s4, int ss4,
+ int16_t *s5_6, int n)
+{
+ int i;
+ int j;
+ for(j=0;j<n;j++){
+ for(i=0;i<16;i++){
+ int x = 0;
+ x += s5_6[0] * s1[i];
+ x += s5_6[1] * s2[i];
+ x += s5_6[2] * s3[i];
+ x += s5_6[3] * s4[i];
+ d[i] = (x + s5_6[4]) >> s5_6[5];
+ }
+ s1 += ss1;
+ s2 += ss2;
+ s3 += ss3;
+ s4 += ss4;
+ d += ds1;
+ }
+}
+OIL_DEFINE_IMPL_REF (combine4_16xn_u8_ref, combine4_16xn_u8);
+