diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-10 16:33:03 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-10 16:33:03 +0000 |
commit | 645a2e16ed645c30858e3b494ba2ff7d00b7a09b (patch) | |
tree | be5da24477ae465c77342947de6ef73c57505e0d /apps/playback.c | |
parent | a9203b4d8352d9de761c5baf95314ff189242ec0 (diff) | |
download | rockbox-645a2e16ed645c30858e3b494ba2ff7d00b7a09b.tar.gz rockbox-645a2e16ed645c30858e3b494ba2ff7d00b7a09b.zip |
Fixed a simulator crash while trying to play a song. Fixed crossfade
when selecting a new track to play. Most likely fixed a bug which
caused playback to stop on track change.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7094 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/apps/playback.c b/apps/playback.c index a1f098b148..e7c1040378 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -191,15 +191,16 @@ void pcm_flush_buffer(long length) | |||
191 | 191 | ||
192 | void* pcm_request_buffer(long length, long *realsize) | 192 | void* pcm_request_buffer(long length, long *realsize) |
193 | { | 193 | { |
194 | (void)length; | 194 | static char temp_audiobuffer[32768]; |
195 | (void)realsize; | 195 | |
196 | *realsize = MIN((int)sizeof(temp_audiobuffer), length); | ||
196 | 197 | ||
197 | return NULL; | 198 | return temp_audiobuffer; |
198 | } | 199 | } |
199 | 200 | ||
200 | void audiobuffer_add_event(void (*event_handler)(void)) | 201 | void audiobuffer_add_event(void (*event_handler)(void)) |
201 | { | 202 | { |
202 | (void)event_handler; | 203 | event_handler(); |
203 | } | 204 | } |
204 | 205 | ||
205 | unsigned int audiobuffer_get_latency() | 206 | unsigned int audiobuffer_get_latency() |
@@ -1287,6 +1288,18 @@ void audio_change_track(void) | |||
1287 | queue_post(&codec_queue, CODEC_LOAD, 0); | 1288 | queue_post(&codec_queue, CODEC_LOAD, 0); |
1288 | } | 1289 | } |
1289 | 1290 | ||
1291 | static int get_codec_base_type(int type) | ||
1292 | { | ||
1293 | switch (type) { | ||
1294 | case AFMT_MPA_L1: | ||
1295 | case AFMT_MPA_L2: | ||
1296 | case AFMT_MPA_L3: | ||
1297 | return AFMT_MPA_L3; | ||
1298 | } | ||
1299 | |||
1300 | return type; | ||
1301 | } | ||
1302 | |||
1290 | bool codec_request_next_track_callback(void) | 1303 | bool codec_request_next_track_callback(void) |
1291 | { | 1304 | { |
1292 | if (ci.stop_codec || !playing) | 1305 | if (ci.stop_codec || !playing) |
@@ -1361,7 +1374,9 @@ bool codec_request_next_track_callback(void) | |||
1361 | 1374 | ||
1362 | ci.reload_codec = false; | 1375 | ci.reload_codec = false; |
1363 | 1376 | ||
1364 | if (cur_ti->id3.codectype != tracks[track_ridx].id3.codectype) { | 1377 | /* Check if the next codec is the same file. */ |
1378 | if (get_codec_base_type(cur_ti->id3.codectype) != | ||
1379 | get_codec_base_type(tracks[track_ridx].id3.codectype)) { | ||
1365 | logf("New codec:%d/%d", cur_ti->id3.codectype, | 1380 | logf("New codec:%d/%d", cur_ti->id3.codectype, |
1366 | tracks[track_ridx].id3.codectype); | 1381 | tracks[track_ridx].id3.codectype); |
1367 | if (--track_ridx < 0) | 1382 | if (--track_ridx < 0) |
@@ -1436,7 +1451,7 @@ void audio_thread(void) | |||
1436 | ci.stop_codec = true; | 1451 | ci.stop_codec = true; |
1437 | ci.reload_codec = false; | 1452 | ci.reload_codec = false; |
1438 | ci.seek_time = 0; | 1453 | ci.seek_time = 0; |
1439 | if (!pcm_crossfade_init()) | 1454 | if (!pcm_crossfade_init() && !pcm_is_crossfade_active()) |
1440 | pcm_flush_audio(); | 1455 | pcm_flush_audio(); |
1441 | audio_play_start((int)ev.data); | 1456 | audio_play_start((int)ev.data); |
1442 | playlist_update_resume_info(audio_current_track()); | 1457 | playlist_update_resume_info(audio_current_track()); |