summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/playback.c4
-rw-r--r--firmware/export/pcm_playback.h2
-rw-r--r--firmware/pcm_playback.c7
3 files changed, 8 insertions, 5 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 7ef4f7b4bc..7c5ebe6b0e 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1102,7 +1102,7 @@ void audio_check_buffer(void)
}
track_count = i;
- if (tracks[track_widx].filerem != 0)
+ if (tracks[track_widx].filesize != 0)
track_count++;
/* Mark all other entries null. */
@@ -1487,6 +1487,8 @@ void audio_next(void)
ci.stop_codec = true;
playlist_next(1);
queue_post(&audio_queue, AUDIO_PLAY, 0);
+ } else if (!pcm_crossfade_start()) {
+ pcm_play_stop();
}
}
diff --git a/firmware/export/pcm_playback.h b/firmware/export/pcm_playback.h
index 32288d7d91..960641531a 100644
--- a/firmware/export/pcm_playback.h
+++ b/firmware/export/pcm_playback.h
@@ -42,7 +42,7 @@ void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left));
void pcm_set_boost_mode(bool state);
bool pcm_is_lowdata(void);
-void pcm_crossfade_start(void);
+bool pcm_crossfade_start(void);
unsigned int audiobuffer_get_latency(void);
bool audiobuffer_insert(char *buf, size_t length);
bool pcm_is_crossfade_enabled(void);
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index d1be2a1102..b18238cd3e 100644
--- a/firmware/pcm_playback.c
+++ b/firmware/pcm_playback.c
@@ -229,6 +229,7 @@ void pcm_play_data(const unsigned char* start, int size,
void pcm_play_stop(void)
{
+ pcm_set_boost_mode(false);
if (pcm_playing) {
uda1380_enable_output(false);
pcm_boost(false);
@@ -243,7 +244,6 @@ void pcm_play_stop(void)
pcmbuf_write_index = 0;
next_start = NULL;
next_size = 0;
- pcm_set_boost_mode(false);
}
void pcm_play_pause(bool play)
@@ -391,11 +391,11 @@ bool pcm_is_lowdata(void)
return false;
}
-void pcm_crossfade_start(void)
+bool pcm_crossfade_start(void)
{
//logf("cf:%d", audiobuffer_free / CHUNK_SIZE);
if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) {
- return ;
+ return false;
}
pcm_boost(true);
crossfade_active = true;
@@ -407,6 +407,7 @@ void pcm_crossfade_start(void)
crossfade_pos -= crossfade_amount*2;
if (crossfade_pos < 0)
crossfade_pos = PCMBUF_SIZE + crossfade_pos;
+ return true;
}
static __inline