summaryrefslogtreecommitdiffstats
path: root/src/sample.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sample.c')
-rw-r--r--src/sample.c94
1 files changed, 5 insertions, 89 deletions
diff --git a/src/sample.c b/src/sample.c
index c270f255..2454630c 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -1,50 +1,8 @@
-#include <string.h>
#include <assert.h>
#include "sample.h"
-struct sample_spec default_sample_spec = {
- .format = SAMPLE_S16NE,
- .rate = 44100,
- .channels = 2
-};
-
-struct memblock *silence_memblock(struct memblock* b, struct sample_spec *spec) {
- assert(b && b->data && spec);
- memblock_assert_exclusive(b);
- silence_memory(b->data, b->length, spec);
- return b;
-}
-
-void silence_memchunk(struct memchunk *c, struct sample_spec *spec) {
- assert(c && c->memblock && c->memblock->data && spec && c->length);
- memblock_assert_exclusive(c->memblock);
- silence_memory(c->memblock->data+c->index, c->length, spec);
-}
-
-void silence_memory(void *p, size_t length, struct sample_spec *spec) {
- char c = 0;
- assert(p && length && spec);
-
- switch (spec->format) {
- case SAMPLE_U8:
- c = 127;
- break;
- case SAMPLE_S16LE:
- case SAMPLE_S16BE:
- case SAMPLE_FLOAT32:
- c = 0;
- break;
- case SAMPLE_ALAW:
- case SAMPLE_ULAW:
- c = 80;
- break;
- }
-
- memset(p, c, length);
-}
-
-size_t sample_size(struct sample_spec *spec) {
+size_t pa_sample_size(struct pa_sample_spec *spec) {
assert(spec);
size_t b = 1;
@@ -66,56 +24,14 @@ size_t sample_size(struct sample_spec *spec) {
return b * spec->channels;
}
-size_t bytes_per_second(struct sample_spec *spec) {
+size_t pa_bytes_per_second(struct pa_sample_spec *spec) {
assert(spec);
- return spec->rate*sample_size(spec);
+ return spec->rate*pa_sample_size(spec);
}
-size_t mix_chunks(struct mix_info channels[], unsigned nchannels, void *data, size_t length, struct sample_spec *spec, uint8_t volume) {
- unsigned c, d;
- assert(channels && data && length && spec);
- assert(spec->format == SAMPLE_S16NE);
-
- for (d = 0;; d += sizeof(int16_t)) {
- int32_t sum = 0;
-
- if (d >= length)
- return d;
-
- for (c = 0; c < nchannels; c++) {
- int32_t v;
- uint8_t volume = channels[c].volume;
-
- if (d >= channels[c].chunk.length)
- return d;
-
- if (volume == 0)
- v = 0;
- else {
- v = *((int16_t*) (channels[c].chunk.memblock->data + channels[c].chunk.index + d));
-
- if (volume != 0xFF)
- v = v*volume/0xFF;
- }
-
- sum += v;
- }
-
- if (volume == 0)
- sum = 0;
- else if (volume != 0xFF)
- sum = sum*volume/0xFF;
-
- if (sum < -0x8000) sum = -0x8000;
- if (sum > 0x7FFF) sum = 0x7FFF;
-
- *((int16_t*) data) = sum;
- data += sizeof(int16_t);
- }
-}
-uint32_t samples_usec(size_t length, struct sample_spec *spec) {
+uint32_t pa_samples_usec(size_t length, struct pa_sample_spec *spec) {
assert(spec);
- return (uint32_t) (((double) length /sample_size(spec))/spec->rate*1000000);
+ return (uint32_t) (((double) length /pa_sample_size(spec))/spec->rate*1000000);
}