diff options
Diffstat (limited to 'kernel/framework/audio/audiocnv.inc')
-rw-r--r-- | kernel/framework/audio/audiocnv.inc | 160 |
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; +} |