From f247f920e1e46009da7a94ed5f7a35c3b36f0713 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 1 Sep 1999 21:53:46 +0000 Subject: [PATCH] Fix for 16-bit and/or stereo samples... --- src/instr/simple.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/instr/simple.c b/src/instr/simple.c index fdd4910e..0d4d0385 100644 --- a/src/instr/simple.c +++ b/src/instr/simple.c @@ -30,7 +30,14 @@ static long simple_size(simple_instrument_t *instr) { - return sizeof(simple_xinstrument_t) + instr->size; + int size; + + size = instr->size; + if (instr->format & SIMPLE_WAVE_16BIT) + size <<= 1; + if (instr->format & SIMPLE_WAVE_STEREO) + size <<= 1; + return size; } int snd_instr_simple_convert_to_stream(snd_instr_simple_t *simple, @@ -50,8 +57,8 @@ int snd_instr_simple_convert_to_stream(snd_instr_simple_t *simple, instr = (simple_instrument_t *)simple; *__data = NULL; *__size = 0; - size = sizeof(*put) + simple_size(simple); - put = (snd_seq_instr_put_t *)malloc(sizeof(*put) + size); + size = simple_size(simple); + put = (snd_seq_instr_put_t *)malloc(sizeof(*put) + sizeof(simple_xinstrument_t) + size); if (put == NULL) return -ENOMEM; /* build header */ @@ -79,10 +86,10 @@ int snd_instr_simple_convert_to_stream(snd_instr_simple_t *simple, xinstr->effect2 = instr->effect2; xinstr->effect2_depth = instr->effect2_depth; ptr = (char *)(xinstr + 1); - memcpy(ptr, instr->address.ptr, instr->size); + memcpy(ptr, instr->address.ptr, size); /* write result */ *__data = put; - *__size = size; + *__size = sizeof(*put) + sizeof(simple_xinstrument_t) + size; return 0; } -- 2.47.1