diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-05 15:19:22 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-05 15:19:22 +0000 |
commit | d6e79424264147e52f70d9ed34b80e34a9d3c23b (patch) | |
tree | 712837474fee23ce550636480f797c45e3829b4c | |
parent | 2d79df5086a3c632ef09bc273c201a8443a7c4a2 (diff) | |
download | rockbox-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.c | 2 | ||||
-rw-r--r-- | apps/playback.c | 23 | ||||
-rw-r--r-- | firmware/export/id3.h | 2 | ||||
-rw-r--r-- | firmware/pcm_playback.c | 9 |
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 */ |
27 | enum { | 27 | enum { |
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 | ||
256 | void pcm_play_stop(void) | 257 | void 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 | ||
267 | void pcm_play_pause(bool play) | 267 | void 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 | ||