diff options
author | Thomas Martitz <kugel@rockbox.org> | 2011-10-26 18:31:19 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2011-10-26 18:31:19 +0000 |
commit | 5d5177931ea6fafcc09b59ea356a89fcd7759756 (patch) | |
tree | e5433d0103bbd56def1e6aa50779444e5ddeb3be /apps/talk.c | |
parent | d3c21023e0fe00db6bff1e4e54a036d182377c1f (diff) |
Fix FS#12241. Voice stopped working after audio_get_buffer() calls.
Since r30308 the talk buffer was set to NULL if e.g. a plugin called
audio_get_buffer() to steal the talk buffer. Since there's no audio_release_buffer() kind of function
the talk buffer was never set back again.
When trying to talk try to get the audio buffer with audio_get_buffer() as well,
which works until the audio buffer gets properly reinitialized.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30840 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/talk.c')
-rw-r--r-- | apps/talk.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/apps/talk.c b/apps/talk.c index a11f830665..ed262b8094 100644 --- a/apps/talk.c +++ b/apps/talk.c @@ -778,6 +778,7 @@ void talk_buffer_steal(void) int talk_id(int32_t id, bool enqueue) { long clipsize; + size_t temp; unsigned char* clipbuf; int32_t unit; int decimals; @@ -789,8 +790,12 @@ int talk_id(int32_t id, bool enqueue) return -1; #endif + /* try to get audio buffer until talkbuf_init() is called */ + if (!voicebuf) + voicebuf = audio_get_buffer(true, &temp); + if (p_voicefile == NULL && has_voicefile) - load_voicefile(false, voicebuf, voicefile_size); /* reload needed */ + load_voicefile(false, voicebuf, MIN(voicefile_size,temp)); /* reload needed */ if (p_voicefile == NULL) /* still no voices? */ return -1; |