summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2007-11-02 14:06:48 +0000
committerBrandon Low <lostlogic@rockbox.org>2007-11-02 14:06:48 +0000
commitdcca586a9bcf58c8059803416e2fdd969ab0e5a6 (patch)
treeeded80fa3cc3aa17a2c61b33e9fb6f0dce13b381 /apps/playback.c
parent21f0552947ea0545977546d8af1aef2359bba754 (diff)
downloadrockbox-dcca586a9bcf58c8059803416e2fdd969ab0e5a6.zip
rockbox-dcca586a9bcf58c8059803416e2fdd969ab0e5a6.tar.gz
rockbox-dcca586a9bcf58c8059803416e2fdd969ab0e5a6.tar.bz2
rockbox-dcca586a9bcf58c8059803416e2fdd969ab0e5a6.tar.xz
Improve upon my hackity hack from before by separating audio into two types: that which may be large and can be streamed and that which is small and cannot be streamed. While modifying types, allow codecs to split across the buffer wrap and dig out/move around the code that reads a codec off of the buffer to facilitate that simple sounding change.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15408 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c35
1 files changed, 8 insertions, 27 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 5cd8e6d..d9f7fa9 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -361,26 +361,6 @@ static struct mp3entry *bufgetid3(int handle_id)
return id3;
}
-static void *bufgetcodec(struct track_info *track)
-{
- void *ptr;
- ssize_t ret = bufgetdata(track->codec_hid, track->codecsize, &ptr);
-
- if (ret == ERR_DATA_NOT_READY) {
- buf_request_buffer_handle(track->codec_hid);
- }
-
- while (ret == ERR_DATA_NOT_READY) {
- sleep(1);
- ret = bufgetdata(track->codec_hid, track->codecsize, &ptr);
- }
-
- if (ret < 0)
- return NULL;
- else
- return ptr;
-}
-
static bool clear_track_info(struct track_info *track)
{
if (!track)
@@ -1876,8 +1856,6 @@ static void codec_thread(void)
{
struct queue_event ev;
int status;
- size_t wrap;
- void *codecptr;
while (1) {
status = 0;
@@ -1933,10 +1911,8 @@ static void codec_thread(void)
#endif
set_current_codec(CODEC_IDX_AUDIO);
ci.stop_codec = false;
- codecptr = bufgetcodec(CUR_TI);
- wrap = (size_t)&filebuf[filebuflen] - (size_t)codecptr;
- status = codec_load_ram(codecptr, CUR_TI->codecsize,
- &filebuf[0], wrap, &ci);
+ status =
+ codec_load_buf(CUR_TI->codec_hid, CUR_TI->codecsize, &ci);
#ifdef PLAYBACK_VOICE
semaphore_release(&sem_codecthread);
#endif
@@ -2447,6 +2423,7 @@ static bool audio_load_track(int offset, bool start_play)
}
struct mp3entry *track_id3;
+ enum data_type type = TYPE_PACKET_AUDIO;
if (track_widx == track_ridx)
track_id3 = &curtrack_id3;
@@ -2487,12 +2464,16 @@ static bool audio_load_track(int offset, bool start_play)
case AFMT_APE:
track_id3->offset = offset;
break;
+ case AFMT_NSF:
+ case AFMT_SPC:
+ type = TYPE_ATOMIC_AUDIO;
+ break;
}
}
logf("alt:%s", trackname);
- tracks[track_widx].audio_hid = bufopen(trackname, file_offset, TYPE_AUDIO);
+ tracks[track_widx].audio_hid = bufopen(trackname, file_offset, type);
if (tracks[track_widx].audio_hid <= 0)
return false;