summaryrefslogtreecommitdiff
path: root/kernel/framework/audio/audiocnv.inc
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:42 +0400
committerIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:42 +0400
commit1058def8e7827e56ce4a70afb4aeacb5dc44148f (patch)
tree4495d23e7b54ab5700e3839081e797c1eafe0db9 /kernel/framework/audio/audiocnv.inc
downloadoss4-1058def8e7827e56ce4a70afb4aeacb5dc44148f.tar.gz
Imported Upstream version 4.2-build2006upstream/4.2-build2006upstream
Diffstat (limited to 'kernel/framework/audio/audiocnv.inc')
-rw-r--r--kernel/framework/audio/audiocnv.inc160
1 files changed, 160 insertions, 0 deletions
diff --git a/kernel/framework/audio/audiocnv.inc b/kernel/framework/audio/audiocnv.inc
new file mode 100644
index 0000000..27ac147
--- /dev/null
+++ b/kernel/framework/audio/audiocnv.inc
@@ -0,0 +1,160 @@
+/*
+ * Purpose: Helper functions used by audiofmt.c
+ */
+/*
+ *
+ * This file is part of Open Sound System.
+ *
+ * Copyright (C) 4Front Technologies 1996-2008.
+ *
+ * This this source file is released under GPL v2 license (no other versions).
+ * See the COPYING file included in the main directory of this source
+ * distribution for the license terms and conditions.
+ *
+ */
+
+/*ARGSUSED*/
+static int
+cnv_F8bits_T16bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl,
+ unsigned char **tgtp, sample_parms * source, sample_parms * target)
+{
+ unsigned char *p1 = *srcp;
+ short *p2 = (short*)*tgtp;
+ int len = *srcl;
+ int i, l;
+
+ VMEM_CHECK (p1, len);
+ VMEM_CHECK (p2, len * 2 / 1);
+
+ l = len / 1;
+ for (i = 0; i < l; i++)
+ p2[i] = ((int) p1[i] - 128) << 8;
+
+ *srcl = len * 2 / 1;
+ *srcp = (unsigned char*)p2;
+ *tgtp = p1;
+
+ return 0;
+}
+
+/*ARGSUSED*/
+static int
+cnv_F8bits_T32bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl,
+ unsigned char **tgtp, sample_parms * source, sample_parms * target)
+{
+ unsigned char *p1 = *srcp;
+ int *p2 = (int *)*tgtp;
+ int len = *srcl;
+ int i, l;
+
+ VMEM_CHECK (p1, len);
+ VMEM_CHECK (p2, len * 4 / 1);
+
+ l = len / 1;
+ for (i = 0; i < l; i++)
+ p2[i] = ((int) p1[i] - 128) << 24;
+
+ *srcl = len * 4 / 1;
+ *srcp = (unsigned char *)p2;
+ *tgtp = p1;
+
+ return 0;
+}
+
+/*ARGSUSED*/
+static int
+cnv_F16bits_T8bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl,
+ unsigned char **tgtp, sample_parms * source, sample_parms * target)
+{
+ short *p1 = (short*)*srcp;
+ unsigned char *p2 = *tgtp;
+ int len = *srcl;
+ int i, l;
+
+ VMEM_CHECK (p1, len);
+ VMEM_CHECK (p2, len * 1 / 2);
+
+ l = len / 2;
+ for (i = 0; i < l; i++)
+ p2[i] = (((int) p1[i]) >> 8) + 128;
+
+ *srcl = len * 1 / 2;
+ *srcp = (unsigned char *)p2;
+ *tgtp = (unsigned char *)p1;
+
+ return 0;
+}
+
+/*ARGSUSED*/
+static int
+cnv_F16bits_T32bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl,
+ unsigned char **tgtp, sample_parms * source,
+ sample_parms * target)
+{
+ short *p1 = (short *)*srcp;
+ int *p2 = (int *)*tgtp;
+ int len = *srcl;
+ int i, l;
+
+ VMEM_CHECK (p1, len);
+ VMEM_CHECK (p2, len * 4 / 2);
+
+ l = len / 2;
+ for (i = 0; i < l; i++)
+ p2[i] = ((int) p1[i]) << 16;
+
+ *srcl = len * 4 / 2;
+ *srcp = (unsigned char *)p2;
+ *tgtp = (unsigned char *)p1;
+
+ return 0;
+}
+
+/*ARGSUSED*/
+static int
+cnv_F32bits_T8bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl,
+ unsigned char **tgtp, sample_parms * source, sample_parms * target)
+{
+ int *p1 = (int*)*srcp;
+ unsigned char *p2 = *tgtp;
+ int len = *srcl;
+ int i, l;
+
+ VMEM_CHECK (p1, len);
+ VMEM_CHECK (p2, len * 1 / 4);
+
+ l = len / 4;
+ for (i = 0; i < l; i++)
+ p2[i] = (((int) p1[i]) >> 24) + 128;
+
+ *srcl = len * 1 / 4;
+ *srcp = p2;
+ *tgtp = (unsigned char *)p1;
+
+ return 0;
+}
+
+/*ARGSUSED*/
+static int
+cnv_F32bits_T16bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl,
+ unsigned char **tgtp, sample_parms * source,
+ sample_parms * target)
+{
+ int *p1 = (int *)*srcp;
+ short *p2 = (short *)*tgtp;
+ int len = *srcl;
+ int i, l;
+
+ VMEM_CHECK (p1, len);
+ VMEM_CHECK (p2, len * 2 / 4);
+
+ l = len / 4;
+ for (i = 0; i < l; i++)
+ p2[i] = (((int) p1[i]) >> 16);
+
+ *srcl = len * 2 / 4;
+ *srcp = (unsigned char *)p2;
+ *tgtp = (unsigned char *)p1;
+
+ return 0;
+}