diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index 773e97cce0..b32cb4c429 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c @@ -580,6 +580,12 @@ static void init_buffer_state(void) chunk_transidx = INVALID_BUF_INDEX; } +/* call prior to init to get bytes required */ +size_t pcmbuf_size_reqd(void) +{ + return get_next_required_pcmbuf_chunks() * PCMBUF_CHUNK_SIZE; +} + /* Initialize the PCM buffer. The structure looks like this: * ...|---------PCMBUF---------|GUARDBUF|DESCS| */ size_t pcmbuf_init(void *bufend) diff --git a/apps/pcmbuf.h b/apps/pcmbuf.h index 33422bbee5..a9daed23cc 100644 --- a/apps/pcmbuf.h +++ b/apps/pcmbuf.h @@ -28,6 +28,7 @@ void *pcmbuf_request_buffer(int *count); void pcmbuf_write_complete(int count, unsigned long elapsed, off_t offset); /* Init */ +size_t pcmbuf_size_reqd(void); size_t pcmbuf_init(void *bufend); /* Playback */ diff --git a/apps/playback.c b/apps/playback.c index 9fe6da6d0e..fb2b6eb1ef 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1040,7 +1040,7 @@ static void audio_reset_buffer(void) core_free(audiobuf_handle); audiobuf_handle = 0; } - if (core_allocatable() < (1 << 10)) + if (core_allocatable() < pcmbuf_size_reqd()) talk_buffer_set_policy(TALK_BUFFER_LOOSE); /* back off voice buffer */ audiobuf_handle = core_alloc_maximum(&filebuflen, &ops);