diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-12 15:14:20 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-12 15:14:20 +0000 |
commit | 097444d07cf394919d7eba149dfe81161cd86453 (patch) | |
tree | 138b463dc08ad23a13f46223b2d79e93327c3a77 | |
parent | 7cdae1ac657e3fe6ffc01bf9b3536d2cc1638fed (diff) | |
download | rockbox-097444d07cf394919d7eba149dfe81161cd86453.tar.gz rockbox-097444d07cf394919d7eba149dfe81161cd86453.zip |
Fixed some mp3 metadata reading performance problem. Next track
switching should be more reliable.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6691 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/playback.c | 4 | ||||
-rw-r--r-- | firmware/mp3data.c | 12 | ||||
-rw-r--r-- | firmware/pcm_playback.c | 2 |
3 files changed, 15 insertions, 3 deletions
diff --git a/apps/playback.c b/apps/playback.c index 0bd0c27c03..391f5e9537 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -666,7 +666,7 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) | |||
666 | mp3info(&tracks[track_widx].id3, trackname, v1first); | 666 | mp3info(&tracks[track_widx].id3, trackname, v1first); |
667 | lseek(fd, 0, SEEK_SET); | 667 | lseek(fd, 0, SEEK_SET); |
668 | /* This is too slow to execute on some files. */ | 668 | /* This is too slow to execute on some files. */ |
669 | // get_mp3file_info(fd, &tracks[track_widx].mp3data); | 669 | get_mp3file_info(fd, &tracks[track_widx].mp3data); |
670 | if (offset) { | 670 | if (offset) { |
671 | lseek(fd, offset, SEEK_SET); | 671 | lseek(fd, offset, SEEK_SET); |
672 | tracks[track_widx].id3.offset = offset; | 672 | tracks[track_widx].id3.offset = offset; |
@@ -1272,7 +1272,7 @@ void codec_thread(void) | |||
1272 | case CODEC_LOAD: | 1272 | case CODEC_LOAD: |
1273 | if (status != PLUGIN_OK) { | 1273 | if (status != PLUGIN_OK) { |
1274 | logf("Codec failure"); | 1274 | logf("Codec failure"); |
1275 | playing = false; | 1275 | // playing = false; |
1276 | } else { | 1276 | } else { |
1277 | logf("Codec finished"); | 1277 | logf("Codec finished"); |
1278 | } | 1278 | } |
diff --git a/firmware/mp3data.c b/firmware/mp3data.c index 2b58710715..6e553eb94a 100644 --- a/firmware/mp3data.c +++ b/firmware/mp3data.c | |||
@@ -37,6 +37,11 @@ | |||
37 | #include "file.h" | 37 | #include "file.h" |
38 | #include "buffer.h" | 38 | #include "buffer.h" |
39 | 39 | ||
40 | #if defined(IRIVER_H100) && !defined(SIMULATOR) | ||
41 | #include "pcm_playback.h" | ||
42 | #include "kernel.h" | ||
43 | #endif | ||
44 | |||
40 | #define DEBUG_VERBOSE | 45 | #define DEBUG_VERBOSE |
41 | 46 | ||
42 | #define BYTES2INT(b1,b2,b3,b4) (((long)(b1 & 0xFF) << (3*8)) | \ | 47 | #define BYTES2INT(b1,b2,b3,b4) (((long)(b1 & 0xFF) << (3*8)) | \ |
@@ -259,6 +264,13 @@ static unsigned long __find_next_frame(int fd, long *offset, long max_offset, | |||
259 | 264 | ||
260 | static int fileread(int fd, unsigned char *c) | 265 | static int fileread(int fd, unsigned char *c) |
261 | { | 266 | { |
267 | #if defined(IRIVER_H100) && !defined(SIMULATOR) | ||
268 | /* We don't want to eat all cpu power. Maybe better way to do this | ||
269 | should be implemented. */ | ||
270 | while (pcm_is_lowdata()) | ||
271 | yield(); | ||
272 | #endif | ||
273 | |||
262 | return read(fd, c, 1); | 274 | return read(fd, c, 1); |
263 | } | 275 | } |
264 | 276 | ||
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 2c63f8ccd7..582f04cd72 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -44,7 +44,7 @@ | |||
44 | /* Must be a power of 2 */ | 44 | /* Must be a power of 2 */ |
45 | #define NUM_PCM_BUFFERS (PCMBUF_SIZE / CHUNK_SIZE) | 45 | #define NUM_PCM_BUFFERS (PCMBUF_SIZE / CHUNK_SIZE) |
46 | #define NUM_PCM_BUFFERS_MASK (NUM_PCM_BUFFERS - 1) | 46 | #define NUM_PCM_BUFFERS_MASK (NUM_PCM_BUFFERS - 1) |
47 | #define PCM_WATERMARK (CHUNK_SIZE * 3) | 47 | #define PCM_WATERMARK (CHUNK_SIZE * 6) |
48 | 48 | ||
49 | static bool pcm_playing; | 49 | static bool pcm_playing; |
50 | static bool pcm_paused; | 50 | static bool pcm_paused; |