summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-05 15:19:22 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-05 15:19:22 +0000
commitd6e79424264147e52f70d9ed34b80e34a9d3c23b (patch)
tree712837474fee23ce550636480f797c45e3829b4c
parent2d79df5086a3c632ef09bc273c201a8443a7c4a2 (diff)
downloadrockbox-d6e79424264147e52f70d9ed34b80e34a9d3c23b.tar.gz
rockbox-d6e79424264147e52f70d9ed34b80e34a9d3c23b.zip
Fixed: Crossfading, broken elapsed info with mp3 files, possible cpu
boost problem and track changing. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7027 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/mpa.c2
-rw-r--r--apps/playback.c23
-rw-r--r--firmware/export/id3.h2
-rw-r--r--firmware/pcm_playback.c9
4 files changed, 21 insertions, 15 deletions
diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c
index a52dc12a40..df78b07247 100644
--- a/apps/codecs/mpa.c
+++ b/apps/codecs/mpa.c
@@ -119,11 +119,11 @@ enum codec_status codec_start(struct codec_api* api)
119 first_frame = false; 119 first_frame = false;
120 file_end = 0; 120 file_end = 0;
121 OutputPtr = OutputBuffer; 121 OutputPtr = OutputBuffer;
122 frequency_divider = ci->id3->frequency / 100;
123 122
124 while (!*ci->taginfo_ready) 123 while (!*ci->taginfo_ready)
125 ci->yield(); 124 ci->yield();
126 125
126 frequency_divider = ci->id3->frequency / 100;
127 ci->configure(DSP_SET_FREQUENCY, (int *)ci->id3->frequency); 127 ci->configure(DSP_SET_FREQUENCY, (int *)ci->id3->frequency);
128 128
129 ci->request_buffer(&size, ci->id3->first_frame_offset); 129 ci->request_buffer(&size, ci->id3->first_frame_offset);
diff --git a/apps/playback.c b/apps/playback.c
index e7baf5b072..e251a1ee89 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1236,16 +1236,19 @@ bool codec_request_next_track_callback(void)
1236 1236
1237 /* Advance to next track. */ 1237 /* Advance to next track. */
1238 if (ci.reload_codec && new_track > 0) { 1238 if (ci.reload_codec && new_track > 0) {
1239 /* Wait for new track data. */
1240 while (track_ridx == track_widx && filling)
1241 yield();
1242
1243 if (!playlist_check(1)) 1239 if (!playlist_check(1))
1244 return false; 1240 return false;
1245 last_peek_offset--; 1241 last_peek_offset--;
1246 playlist_next(1); 1242 playlist_next(1);
1247 if (++track_ridx == MAX_TRACK) 1243 if (++track_ridx == MAX_TRACK)
1248 track_ridx = 0; 1244 track_ridx = 0;
1245
1246 /* Wait for new track data (codectype 0 is invalid). When a correct
1247 codectype is set, we can assume that the filesize is correct. */
1248 while (tracks[track_ridx].id3.codectype == 0 && filling
1249 && !ci.stop_codec)
1250 yield();
1251
1249 if (tracks[track_ridx].filesize == 0) { 1252 if (tracks[track_ridx].filesize == 0) {
1250 logf("Loading from disk..."); 1253 logf("Loading from disk...");
1251 new_track = 0; 1254 new_track = 0;
@@ -1274,10 +1277,6 @@ bool codec_request_next_track_callback(void)
1274 1277
1275 /* Codec requested track change (next track). */ 1278 /* Codec requested track change (next track). */
1276 else { 1279 else {
1277 /* Wait for new track data. */
1278 while (track_ridx == track_widx && filling)
1279 yield();
1280
1281 if (!playlist_check(1)) 1280 if (!playlist_check(1))
1282 return false; 1281 return false;
1283 last_peek_offset--; 1282 last_peek_offset--;
@@ -1285,7 +1284,13 @@ bool codec_request_next_track_callback(void)
1285 if (++track_ridx >= MAX_TRACK) 1284 if (++track_ridx >= MAX_TRACK)
1286 track_ridx = 0; 1285 track_ridx = 0;
1287 1286
1288 if (track_ridx == track_widx && tracks[track_ridx].filerem == 0) { 1287 /* Wait for new track data (codectype 0 is invalid). When a correct
1288 codectype is set, we can assume that the filesize is correct. */
1289 while (tracks[track_ridx].id3.codectype == 0 && filling
1290 && !ci.stop_codec)
1291 yield();
1292
1293 if (tracks[track_ridx].filesize == 0) {
1289 logf("No more tracks"); 1294 logf("No more tracks");
1290 new_track = 0; 1295 new_track = 0;
1291 return false; 1296 return false;
diff --git a/firmware/export/id3.h b/firmware/export/id3.h
index 8fd41a1286..8f904e49e6 100644
--- a/firmware/export/id3.h
+++ b/firmware/export/id3.h
@@ -25,7 +25,7 @@
25/* Audio file types. */ 25/* Audio file types. */
26/* NOTE: When adding new audio types, also add to codec_labels[] in id3.c */ 26/* NOTE: When adding new audio types, also add to codec_labels[] in id3.c */
27enum { 27enum {
28 AFMT_UNKNOWN = 0, /* Unknown file format */ 28 AFMT_UNKNOWN = 1, /* Unknown file format */
29 29
30#if CONFIG_HWCODEC==MASNONE 30#if CONFIG_HWCODEC==MASNONE
31 AFMT_MPA_L1, /* MPEG Audio layer 1 */ 31 AFMT_MPA_L1, /* MPEG Audio layer 1 */
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index 298d2e7874..a58069d5f1 100644
--- a/firmware/pcm_playback.c
+++ b/firmware/pcm_playback.c
@@ -127,7 +127,7 @@ void pcm_boost(bool state)
127{ 127{
128 static bool boost_state = false; 128 static bool boost_state = false;
129 129
130 if (crossfade_active || boost_mode) 130 if (crossfade_init || crossfade_active || boost_mode)
131 return ; 131 return ;
132 132
133 if (state != boost_state) { 133 if (state != boost_state) {
@@ -158,6 +158,7 @@ static void dma_stop(void)
158 next_start = NULL; 158 next_start = NULL;
159 next_size = 0; 159 next_size = 0;
160 crossfade_init = 0; 160 crossfade_init = 0;
161 crossfade_active = 0;
161 pcm_paused = false; 162 pcm_paused = false;
162} 163}
163 164
@@ -255,13 +256,12 @@ void pcm_play_data(const unsigned char* start, int size,
255 256
256void pcm_play_stop(void) 257void pcm_play_stop(void)
257{ 258{
258 crossfade_active = false;
259 pcm_set_boost_mode(false);
260 pcm_boost(false);
261 if (pcm_playing) { 259 if (pcm_playing) {
262 uda1380_mute(true); 260 uda1380_mute(true);
263 dma_stop(); 261 dma_stop();
264 } 262 }
263 pcm_set_boost_mode(false);
264 pcm_boost(false);
265} 265}
266 266
267void pcm_play_pause(bool play) 267void pcm_play_pause(bool play)
@@ -436,6 +436,7 @@ bool pcm_crossfade_init(void)
436 return false; 436 return false;
437 } 437 }
438 logf("crossfading!"); 438 logf("crossfading!");
439 pcm_boost(true);
439 crossfade_mode = CFM_CROSSFADE; 440 crossfade_mode = CFM_CROSSFADE;
440 crossfade_init = true; 441 crossfade_init = true;
441 442