aboutsummaryrefslogtreecommitdiff
path: root/include/pdp_mmx.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/pdp_mmx.h')
-rw-r--r--include/pdp_mmx.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/include/pdp_mmx.h b/include/pdp_mmx.h
new file mode 100644
index 0000000..8e70779
--- /dev/null
+++ b/include/pdp_mmx.h
@@ -0,0 +1,158 @@
+
+/*
+ * Pure Data Packet. Header file for mmx routines.
+ * Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+
+#ifndef PDP_MMX_H
+#define PDP_MMX_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/****************************** 16 bit signed (pixel) routines ***************************************/
+
+/* pack: gain is 8.8 fixed point */
+void pixel_pack_s16u8_y(short int *input_pixels,
+ unsigned char *output_pixels,
+ int nb_pixels_div_8);
+
+void pixel_pack_s16u8_uv(short int *input_pixels,
+ unsigned char *output_pixels,
+ int nb_pixels_div_8);
+
+
+/* unpack: gain is not used -> full scale unpack */
+void pixel_unpack_u8s16_y(unsigned char *input_pixels,
+ short int *output_pixels,
+ int nb_pixels_div_8);
+
+void pixel_unpack_u8s16_uv(unsigned char *input_pixels,
+ short int *output_pixels,
+ int nb_pixels_div_8);
+
+
+/* gain */
+/* gain = integer */
+/* shift is down shift count */
+void pixel_gain_s16(short int *image,
+ int nb_4pixel_vectors,
+ short int gain[4],
+ unsigned long long *shift);
+
+
+/* mix: left = gain_left * left + gain_right * right / gains are s.15 fixed point */
+void pixel_mix_s16(short int *left,
+ short int *right,
+ int nb_4pixel_vectors,
+ short int gain_left[4],
+ short int gain_right[4]);
+
+void pixel_randmix_s16(short int *left,
+ short int *right,
+ int nb_4pixel_vectors,
+ short int random_seed[4],
+ short int threshold[4]);
+
+void pixel_rand_s16(short int *image,
+ int nb_4pixel_vectors,
+ short int random_seed[4]);
+
+void pixel_add_s16(short int *left,
+ short int *right,
+ int nb_4pixel_vectors);
+
+void pixel_mul_s16(short int *left,
+ short int *right,
+ int nb_4pixel_vectors);
+
+
+/* affine transfo */
+void pixel_affine_s16(short int *buf,
+ int nb_4pixel_vectors,
+ short int gain[4],
+ short int offset[4]);
+
+/* conv */
+void pixel_conv_hor_s16(short int *pixel_array,
+ int nb_4_pixel_vectors,
+ short int border[4],
+ short int mask[12]);
+
+void pixel_conv_ver_s16(short int *pixel_array,
+ int nb_4_pixel_vectors,
+ int row_byte_size,
+ short int border[4],
+ short int mask[12]);
+
+/* biquad */
+
+void pixel_biquad_vertb_s16(short int *pixel_array,
+ int nb_4x4_pixblocks,
+ int linewidth,
+ short int coef[20],
+ short int state[8]);
+
+void pixel_biquad_verbt_s16(short int *pixel_array,
+ int nb_4x4_pixblocks,
+ int linewidth,
+ short int coef[20],
+ short int state[8]);
+
+
+void pixel_biquad_horlr_s16(short int *pixel_array,
+ int nb_4x4_pixblocks,
+ int linewidth,
+ short int coef[20],
+ short int state[8]);
+
+void pixel_biquad_horrl_s16(short int *pixel_array,
+ int nb_4x4_pixblocks,
+ int linewidth,
+ short int coef[20],
+ short int state[8]);
+
+void pixel_biquad_time_s16(short int *pixel_array,
+ short int *state_array1,
+ short int *state_array2,
+ short int *coefs,
+ int nb_4_pix_vectors);
+
+/********************************** PLANAR COLOUR OPERATIONS ***************************************/
+
+/* color rotation for 3 colour planes */
+void pixel_crot3d_s16(short int *pixel_array,
+ int nb_4pixel_vectors_per_plane,
+ short int *row_encoded_vector_matrix);
+
+
+/* color rotation for 2 colour planes */
+void pixel_crot2d_s16(short int *pixel_array,
+ int nb_4pixel_vectors_per_plane,
+ short int *row_encoded_vector_matrix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //PDP_MMX_H