From 889690c0f60a2ce2cdfd985895d0484c78083df1 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Sun, 9 Oct 2011 12:30:37 +0000 Subject: [PATCH] Fix audio_get_buffer() implementation on hwcodec, to be similar to the swcodec one. Should make hwcodec bood again. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30737 a1c6a512-1295-4272-9138-f99709370657 --- apps/mpeg.c | 12 +++++++----- firmware/buflib.c | 4 ++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/mpeg.c b/apps/mpeg.c index 2a2821bcda..b7db602120 100644 --- a/apps/mpeg.c +++ b/apps/mpeg.c @@ -558,8 +558,10 @@ unsigned char * audio_get_buffer(bool talk_buf, size_t *buffer_size) { (void)talk_buf; /* always grab the voice buffer for now */ - if (buffer_size) /* special case for talk_init() */ - audio_hard_stop(); + audio_hard_stop(); + + if (!buffer_size) /* special case for talk_init() */ + return NULL; if (!audiobuf_handle) { @@ -571,9 +573,9 @@ unsigned char * audio_get_buffer(bool talk_buf, size_t *buffer_size) *buffer_size = audiobuflen; } mpeg_audiobuf = core_get_data(audiobuf_handle); - - if (!buffer_size) /* special case for talk_init() */ - talkbuf_init(mpeg_audiobuf); + /* tell talk about the new buffer, don't re-enable just yet because the + * buffer is stolen */ + talkbuf_init(mpeg_audiobuf); return mpeg_audiobuf; } diff --git a/firmware/buflib.c b/firmware/buflib.c index d82acd77d3..4ffd6cfce3 100644 --- a/firmware/buflib.c +++ b/firmware/buflib.c @@ -628,7 +628,11 @@ buflib_alloc_maximum(struct buflib_context* ctx, const char* name, size_t *size, { /* limit name to 16 since that's what buflib_available() accounts for it */ char buf[16]; + *size = buflib_available(ctx); + if (*size <= 0) /* OOM */ + return -1; + strlcpy(buf, name, sizeof(buf)); return buflib_alloc_ex(ctx, *size, buf, ops); -- 2.11.4.GIT