summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/playback.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/apps/playback.c b/apps/playback.c
index d2150f6a00..9bbce17a0a 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -828,6 +828,16 @@ bufpanic:
828/* Buffer must not move. */ 828/* Buffer must not move. */
829static int shrink_callback(int handle, unsigned hints, void* start, size_t old_size) 829static int shrink_callback(int handle, unsigned hints, void* start, size_t old_size)
830{ 830{
831 /* filebuflen is, at this point, the buffering.c buffer size,
832 * i.e. the audiobuf except voice, scratch mem, pcm, ... */
833 ssize_t extradata_size = old_size - filebuflen;
834 /* check what buflib requests */
835 size_t wanted_size = (hints & BUFLIB_SHRINK_SIZE_MASK);
836 ssize_t size = (ssize_t)old_size - wanted_size;
837 /* keep at least 256K for the buffering */
838 if ((size - extradata_size) < 256*1024)
839 return BUFLIB_CB_CANNOT_SHRINK;
840
831 long offset = audio_current_track()->offset; 841 long offset = audio_current_track()->offset;
832 int status = audio_status(); 842 int status = audio_status();
833 /* TODO: Do it without stopping playback, if possible */ 843 /* TODO: Do it without stopping playback, if possible */
@@ -843,10 +853,9 @@ static int shrink_callback(int handle, unsigned hints, void* start, size_t old_s
843#ifdef PLAYBACK_VOICE 853#ifdef PLAYBACK_VOICE
844 voice_stop(); 854 voice_stop();
845#endif 855#endif
846 /* we should be free to change the buffer now */ 856 /* we should be free to change the buffer now
847 size_t wanted_size = (hints & BUFLIB_SHRINK_SIZE_MASK); 857 * set final buffer size before calling audio_reset_buffer_noalloc()
848 ssize_t size = (ssize_t)old_size - wanted_size; 858 * (now it's the total size, the call will subtract voice etc) */
849 /* set final buffer size before calling audio_reset_buffer_noalloc() */
850 filebuflen = size; 859 filebuflen = size;
851 switch (hints & BUFLIB_SHRINK_POS_MASK) 860 switch (hints & BUFLIB_SHRINK_POS_MASK)
852 { 861 {