summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-22 16:46:27 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-22 16:46:27 +0000
commit90161c92ddbccbdf9e28d43c75bb7e64ddfbecd0 (patch)
treeac53454c122465d174ec6a47a56e72505d7b09b8 /apps/playback.c
parent4f6375ca175b34623e5c737cd36dbd62aad58fd2 (diff)
downloadrockbox-90161c92ddbccbdf9e28d43c75bb7e64ddfbecd0.zip
rockbox-90161c92ddbccbdf9e28d43c75bb7e64ddfbecd0.tar.gz
rockbox-90161c92ddbccbdf9e28d43c75bb7e64ddfbecd0.tar.bz2
rockbox-90161c92ddbccbdf9e28d43c75bb7e64ddfbecd0.tar.xz
It's now possible to select the crossfading mode: "Off, Crossfade,
Mix". If set to mix, no fading is applied but tracks are mixed up. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7224 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 7aaff01..f502d82 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1175,7 +1175,8 @@ void audio_update_trackinfo(void)
cur_ti->start_pos = 0;
ci.taginfo_ready = (bool *)&cur_ti->taginfo_ready;
if (pcmbuf_is_crossfade_enabled() && !pcmbuf_is_crossfade_active()) {
- pcmbuf_crossfade_init();
+ pcmbuf_crossfade_init(new_track ? CROSSFADE_MODE_CROSSFADE
+ : global_settings.crossfade);
codec_track_changed();
} else {
pcmbuf_add_event(codec_track_changed);
@@ -1393,7 +1394,7 @@ void audio_thread(void)
ci.stop_codec = true;
ci.reload_codec = false;
ci.seek_time = 0;
- pcmbuf_crossfade_init();
+ pcmbuf_crossfade_init(CROSSFADE_MODE_CROSSFADE);
while (codec_loaded)
yield();
audio_play_start((int)ev.data);
@@ -1771,19 +1772,22 @@ void audio_set_buffer_margin(int setting)
set_filebuf_watermark(buffer_margin);
}
-void audio_set_crossfade_amount(int seconds)
+/* Set crossfade & PCM buffer length. */
+void audio_set_crossfade(int type)
{
long size;
bool was_playing = playing;
int offset = 0;
+ int lookup[] = {1, 2, 4, 6, 8, 10, 12, 14};
+ int seconds = lookup[global_settings.crossfade_duration];
/* Store the track resume position */
if (playing)
offset = cur_ti->id3.offset;
- /* Multiply by two to get the real value (0s, 2s, 4s, ...) */
- seconds *= 2;
-
+ if (type == CROSSFADE_MODE_OFF)
+ seconds = 0;
+
/* Buffer has to be at least 2s long. */
seconds += 2;
logf("buf len: %d", seconds);