summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2006-08-15 18:01:42 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2006-08-15 18:01:42 +0000
commit42f0ad3c8f11a699f4ce7d500b91e195e1a619e3 (patch)
treef58d7c1e1153a3ab96441ea857b5ac36e3f14e65 /apps/playback.c
parent599fa9a6279a4e7dda4b6a46bef6bf4958bb0399 (diff)
downloadrockbox-42f0ad3c8f11a699f4ce7d500b91e195e1a619e3.tar.gz
rockbox-42f0ad3c8f11a699f4ce7d500b91e195e1a619e3.zip
Patch #5766 by Steve Bavin - Fix for various voice related crashes
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10590 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 890a2d7d1b..ef93177eec 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -481,9 +481,13 @@ static void* get_voice_memory_callback(size_t *size)
481static void* get_codec_memory_callback(size_t *size) 481static void* get_codec_memory_callback(size_t *size)
482{ 482{
483 *size = MALLOC_BUFSIZE; 483 *size = MALLOC_BUFSIZE;
484#if CONFIG_CODEC != SWCODEC
485 /* MASCODEC cannot play audio and voice simultaneously, so its
486 voice strategy is different - see talk.c for details */
484 if (voice_codec_loaded) 487 if (voice_codec_loaded)
485 return &audiobuf[talk_get_bufsize()]; 488 return &audiobuf[talk_get_bufsize()];
486 else 489 else
490#endif
487 return audiobuf; 491 return audiobuf;
488} 492}
489 493
@@ -2559,7 +2563,7 @@ static void reset_buffer(void)
2559 filebuflen = audiobufend - audiobuf - MALLOC_BUFSIZE - GUARD_BUFSIZE - 2563 filebuflen = audiobufend - audiobuf - MALLOC_BUFSIZE - GUARD_BUFSIZE -
2560 (pcmbuf_get_bufsize() + get_pcmbuf_descsize() + PCMBUF_MIX_CHUNK * 2); 2564 (pcmbuf_get_bufsize() + get_pcmbuf_descsize() + PCMBUF_MIX_CHUNK * 2);
2561 2565
2562 if (talk_get_bufsize()) 2566 if (talk_voice_required())
2563 { 2567 {
2564 filebuf = &filebuf[talk_get_bufsize()]; 2568 filebuf = &filebuf[talk_get_bufsize()];
2565 filebuflen -= 2*CODEC_IRAM_SIZE + 2*CODEC_SIZE + talk_get_bufsize(); 2569 filebuflen -= 2*CODEC_IRAM_SIZE + 2*CODEC_SIZE + talk_get_bufsize();
@@ -2569,8 +2573,17 @@ static void reset_buffer(void)
2569 iram_buf[1] = &filebuf[filebuflen+CODEC_IRAM_SIZE]; 2573 iram_buf[1] = &filebuf[filebuflen+CODEC_IRAM_SIZE];
2570#endif 2574#endif
2571 dram_buf[0] = (unsigned char *)&filebuf[filebuflen+CODEC_IRAM_SIZE*2]; 2575 dram_buf[0] = (unsigned char *)&filebuf[filebuflen+CODEC_IRAM_SIZE*2];
2572 dram_buf[1] = 2576 dram_buf[1] = (unsigned char *)&filebuf[filebuflen+CODEC_IRAM_SIZE*2+CODEC_SIZE];
2573 (unsigned char *)&filebuf[filebuflen+CODEC_IRAM_SIZE*2+CODEC_SIZE]; 2577 }
2578 else
2579 {
2580 filebuf = &filebuf[talk_get_bufsize()];
2581 filebuflen -= CODEC_IRAM_SIZE + CODEC_SIZE + talk_get_bufsize();
2582
2583#ifndef SIMULATOR
2584 iram_buf[0] = &filebuf[filebuflen];
2585#endif
2586 dram_buf[0] = (unsigned char *)&filebuf[filebuflen+CODEC_IRAM_SIZE*2];
2574 } 2587 }
2575 2588
2576 /* Ensure that everything is aligned */ 2589 /* Ensure that everything is aligned */
@@ -2616,8 +2629,8 @@ void voice_init(void)
2616 voice_codec_loaded = false; 2629 voice_codec_loaded = false;
2617 } 2630 }
2618 2631
2619 if (!talk_get_bufsize()) 2632 if (!talk_voice_required())
2620 return ; 2633 return;
2621 2634
2622 logf("Starting voice codec"); 2635 logf("Starting voice codec");
2623 queue_init(&voice_codec_queue); 2636 queue_init(&voice_codec_queue);