From 7d83e5c7816b5e343695a75ba58b32dbe1be969a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 1 Oct 2007 20:16:28 +0000 Subject: move all sources down to a seperate src/ tree git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@34 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce --- src/zero.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/zero.c (limited to 'src/zero.c') diff --git a/src/zero.c b/src/zero.c new file mode 100644 index 0000000..4f477dc --- /dev/null +++ b/src/zero.c @@ -0,0 +1,53 @@ +#include + +#include "macro.h" +#include "zero.h" + +static void zero_u8(void *dst, size_t dstr, size_t bytes) { + uint8_t *d = dst; + + if (dstr == 1) + memset(dst, 0x80, bytes); + else { + for (; bytes > 0; bytes --, d += dstr) + *d = 0x80; + } +} + +static void zero_16(void *dst, size_t dstr, size_t bytes) { + uint16_t *d = dst; + unsigned n = bytes/sizeof(uint16_t); + + if (dstr == sizeof(uint16_t)) + memset(dst, 0, bytes); + else { + for (; n > 0; n --, d += dstr/sizeof(uint16_t)) + *d = 0; + } +} + +static void zero_32(void *dst, size_t dstr, size_t bytes) { + uint32_t *d = dst; + unsigned n = bytes/sizeof(float); + + if (dstr == sizeof(uint32_t)) + memset(dst, 0, bytes); + else { + for (; n > 0; n --, d += dstr/sizeof(uint32_t)) + *d = 0; + } +} + +sa_zero_func_t sa_get_zero_func(sa_pcm_format_t f) { + + static const sa_zero_func_t funcs[_SA_PCM_FORMAT_MAX] = { + [SA_PCM_FORMAT_U8] = zero_u8, + [SA_PCM_FORMAT_S16_NE] = zero_16, + [SA_PCM_FORMAT_S32_NE] = zero_32, + [SA_PCM_FORMAT_FLOAT32_NE] = zero_32 + }; + + sa_assert(f < _SA_PCM_FORMAT_MAX); + + return funcs[f]; +} -- cgit