diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2006-08-15 18:01:42 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2006-08-15 18:01:42 +0000 |
commit | 42f0ad3c8f11a699f4ce7d500b91e195e1a619e3 (patch) | |
tree | f58d7c1e1153a3ab96441ea857b5ac36e3f14e65 /apps/playback.c | |
parent | 599fa9a6279a4e7dda4b6a46bef6bf4958bb0399 (diff) | |
download | rockbox-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.c | 23 |
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) | |||
481 | static void* get_codec_memory_callback(size_t *size) | 481 | static 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); |