summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-10 16:33:03 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-10 16:33:03 +0000
commit645a2e16ed645c30858e3b494ba2ff7d00b7a09b (patch)
treebe5da24477ae465c77342947de6ef73c57505e0d /apps/playback.c
parenta9203b4d8352d9de761c5baf95314ff189242ec0 (diff)
downloadrockbox-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.c27
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
192void* pcm_request_buffer(long length, long *realsize) 192void* 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
200void audiobuffer_add_event(void (*event_handler)(void)) 201void audiobuffer_add_event(void (*event_handler)(void))
201{ 202{
202 (void)event_handler; 203 event_handler();
203} 204}
204 205
205unsigned int audiobuffer_get_latency() 206unsigned 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
1291static 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
1290bool codec_request_next_track_callback(void) 1303bool 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());