summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-06-12 15:14:20 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-06-12 15:14:20 +0000
commit097444d07cf394919d7eba149dfe81161cd86453 (patch)
tree138b463dc08ad23a13f46223b2d79e93327c3a77
parent7cdae1ac657e3fe6ffc01bf9b3536d2cc1638fed (diff)
downloadrockbox-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.c4
-rw-r--r--firmware/mp3data.c12
-rw-r--r--firmware/pcm_playback.c2
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
260static int fileread(int fd, unsigned char *c) 265static 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
49static bool pcm_playing; 49static bool pcm_playing;
50static bool pcm_paused; 50static bool pcm_paused;