summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/pcmbuf.c12
-rw-r--r--apps/playback.c16
2 files changed, 19 insertions, 9 deletions
diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c
index ca17437..946eb16 100644
--- a/apps/pcmbuf.c
+++ b/apps/pcmbuf.c
@@ -467,22 +467,20 @@ static size_t get_next_required_pcmbuf_size(void)
}
/* Initialize the pcmbuffer the structure looks like this:
- * ...|---------PCMBUF---------|FADEBUF|VOICEBUF|DESCS|... */
+ * ...|---------PCMBUF---------[|FADEBUF]|DESCS|... */
size_t pcmbuf_init(unsigned char *bufend)
{
- unsigned char *voicebuf;
-
pcmbuf_bufend = bufend;
pcmbuf_size = get_next_required_pcmbuf_size();
write_chunk = (struct chunkdesc *)pcmbuf_bufend -
NUM_CHUNK_DESCS(pcmbuf_size);
- voicebuf = (unsigned char *)write_chunk -
- voicebuf_init((unsigned char *)write_chunk);
+
#ifdef HAVE_CROSSFADE
- fadebuf = voicebuf - CROSSFADE_BUFSIZE;
+ fadebuf = (unsigned char *)write_chunk -
+ (crossfade_enable_request ? CROSSFADE_BUFSIZE : 0);
pcmbuffer = fadebuf - pcmbuf_size;
#else
- pcmbuffer = voicebuf - pcmbuf_size;
+ pcmbuffer = (unsigned char *)write_chunk - pcmbuf_size;
#endif
init_pcmbuffers();
diff --git a/apps/playback.c b/apps/playback.c
index c74c606..fe9bd57 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -738,7 +738,7 @@ static void audio_reset_buffer(void)
{
/*
* Layout audio buffer as follows:
- * [[|TALK]|SCRATCH|BUFFERING|PCM|]
+ * [[|TALK]|SCRATCH|BUFFERING|PCM|[VOICE|]]
*/
/* see audio_get_recording_buffer if this is modified */
@@ -755,6 +755,18 @@ static void audio_reset_buffer(void)
ALIGN_BUFFER(filebuf, filebuflen, sizeof (intptr_t));
+ if (talk_voice_required())
+ {
+ /* Need a space for voice PCM output */
+ allocsize = voicebuf_init(filebuf + filebuflen);
+
+ allocsize = ALIGN_UP(allocsize, sizeof (intptr_t));
+ if (allocsize > filebuflen)
+ goto bufpanic;
+
+ filebuflen -= allocsize;
+ }
+
/* Subtract whatever the pcm buffer says it used plus the guard buffer */
allocsize = pcmbuf_init(filebuf + filebuflen);
@@ -3475,7 +3487,7 @@ unsigned char * audio_get_buffer(bool talk_buf, size_t *buffer_size)
swap space */
logf("get buffer: audio");
buf = audiobuf + talk_get_bufsize();
- end = audiobufend - pcmbuf_init(audiobufend);
+ end = audiobufend - voicebuf_init(audiobufend);
buffer_state = AUDIOBUF_STATE_VOICED_ONLY;
}