diff options
author | David Schleef <ds@ginger.bigkitten.com> | 2008-02-13 02:27:30 -0800 |
---|---|---|
committer | David Schleef <ds@ginger.bigkitten.com> | 2008-02-13 02:27:30 -0800 |
commit | 90c27e2a2ef4c51fa4d18c8d2cb0c8b0fd92454f (patch) | |
tree | fb0d40d085a0aaeb8dbaf339d46054ffabc2eaac /liboil/ref | |
parent | 4a69d69703a542539978ec3b58a767de5d020147 (diff) | |
download | liboil-90c27e2a2ef4c51fa4d18c8d2cb0c8b0fd92454f.tar.gz |
Copy more functions from schro.
Diffstat (limited to 'liboil/ref')
-rw-r--r-- | liboil/ref/mas.c | 20 | ||||
-rw-r--r-- | liboil/ref/wavelet.c | 107 |
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); + |