diff options
| author | Brandon Low <lostlogic@rockbox.org> | 2007-11-02 14:06:48 +0000 |
|---|---|---|
| committer | Brandon Low <lostlogic@rockbox.org> | 2007-11-02 14:06:48 +0000 |
| commit | dcca586a9bcf58c8059803416e2fdd969ab0e5a6 (patch) | |
| tree | eded80fa3cc3aa17a2c61b33e9fb6f0dce13b381 /apps/playback.c | |
| parent | 21f0552947ea0545977546d8af1aef2359bba754 (diff) | |
| download | rockbox-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.c | 35 |
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; |