forked from len0rd/rockbox
Better handling for cpu_boost(). Small buffering fix.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6647 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b945fe84aa
commit
2ed0b195be
3 changed files with 28 additions and 20 deletions
|
|
@ -438,8 +438,8 @@ void audio_fill_file_buffer(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
buf_widx += rc;
|
buf_widx += rc;
|
||||||
if (buf_widx == codecbuflen)
|
if (buf_widx >= codecbuflen)
|
||||||
buf_widx = 0;
|
buf_widx -= codecbuflen;
|
||||||
i += rc;
|
i += rc;
|
||||||
tracks[track_widx].available += rc;
|
tracks[track_widx].available += rc;
|
||||||
fill_bytesleft -= rc;
|
fill_bytesleft -= rc;
|
||||||
|
|
@ -552,7 +552,7 @@ bool loadcodec(const char *trackname, bool start_play)
|
||||||
return false;
|
return false;
|
||||||
buf_widx += rc;
|
buf_widx += rc;
|
||||||
if (buf_widx >= codecbuflen)
|
if (buf_widx >= codecbuflen)
|
||||||
buf_widx = 0;
|
buf_widx -= codecbuflen;
|
||||||
i += rc;
|
i += rc;
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
@ -598,7 +598,7 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
|
||||||
|
|
||||||
/* Load the codec */
|
/* Load the codec */
|
||||||
if (buf_widx >= codecbuflen)
|
if (buf_widx >= codecbuflen)
|
||||||
buf_widx = 0;
|
buf_widx -= codecbuflen;
|
||||||
|
|
||||||
tracks[track_widx].codecbuf = &codecbuf[buf_widx];
|
tracks[track_widx].codecbuf = &codecbuf[buf_widx];
|
||||||
if (!loadcodec(trackname, start_play)) {
|
if (!loadcodec(trackname, start_play)) {
|
||||||
|
|
@ -742,15 +742,15 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
|
||||||
}
|
}
|
||||||
buf_widx += rc;
|
buf_widx += rc;
|
||||||
if (buf_widx >= codecbuflen)
|
if (buf_widx >= codecbuflen)
|
||||||
buf_widx = 0;
|
buf_widx -= codecbuflen;
|
||||||
i += rc;
|
i += rc;
|
||||||
tracks[track_widx].available += rc;
|
tracks[track_widx].available += rc;
|
||||||
tracks[track_widx].filerem -= rc;
|
tracks[track_widx].filerem -= rc;
|
||||||
|
codecbufused += rc;
|
||||||
fill_bytesleft -= rc;
|
fill_bytesleft -= rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks[track_widx].filepos = i;
|
tracks[track_widx].filepos = i;
|
||||||
codecbufused += i;
|
|
||||||
|
|
||||||
/* Leave the file handle open for faster buffer refill. */
|
/* Leave the file handle open for faster buffer refill. */
|
||||||
if (tracks[track_widx].filerem != 0) {
|
if (tracks[track_widx].filerem != 0) {
|
||||||
|
|
@ -809,8 +809,8 @@ void audio_check_buffer(void)
|
||||||
|
|
||||||
/* Fill buffer as full as possible for cross-fader. */
|
/* Fill buffer as full as possible for cross-fader. */
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
if (cur_ti->id3.length > 0 &&
|
if (pcm_is_crossfade_enabled() && cur_ti->id3.length > 0
|
||||||
cur_ti->id3.length - cur_ti->id3.elapsed < 20000 && playing)
|
&& cur_ti->id3.length - cur_ti->id3.elapsed < 20000 && playing)
|
||||||
pcm_set_boost_mode(true);
|
pcm_set_boost_mode(true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -873,6 +873,7 @@ void audio_update_trackinfo(void)
|
||||||
|
|
||||||
cur_ti = &tracks[track_ridx];
|
cur_ti = &tracks[track_ridx];
|
||||||
buf_ridx += cur_ti->codecsize;
|
buf_ridx += cur_ti->codecsize;
|
||||||
|
codecbufused -= cur_ti->codecsize;
|
||||||
if (buf_ridx >= codecbuflen)
|
if (buf_ridx >= codecbuflen)
|
||||||
buf_ridx -= codecbuflen;
|
buf_ridx -= codecbuflen;
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
|
|
@ -989,7 +990,7 @@ void audio_thread(void)
|
||||||
struct event ev;
|
struct event ev;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
yield();
|
sleep(50);
|
||||||
audio_check_buffer();
|
audio_check_buffer();
|
||||||
|
|
||||||
queue_wait_w_tmo(&audio_queue, &ev, 10);
|
queue_wait_w_tmo(&audio_queue, &ev, 10);
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ bool pcm_is_lowdata(void);
|
||||||
void pcm_crossfade_start(void);
|
void pcm_crossfade_start(void);
|
||||||
unsigned int audiobuffer_get_latency(void);
|
unsigned int audiobuffer_get_latency(void);
|
||||||
bool audiobuffer_insert(char *buf, size_t length);
|
bool audiobuffer_insert(char *buf, size_t length);
|
||||||
|
bool pcm_is_crossfade_enabled(void);
|
||||||
void pcm_crossfade_enable(bool on_off);
|
void pcm_crossfade_enable(bool on_off);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -99,15 +99,6 @@ static void dma_start(const void *addr, long size)
|
||||||
DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START;
|
DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stops the DMA transfer and interrupt */
|
|
||||||
static void dma_stop(void)
|
|
||||||
{
|
|
||||||
pcm_playing = false;
|
|
||||||
|
|
||||||
/* Reset the FIFO */
|
|
||||||
IIS2CONFIG = 0x800;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_boost(bool state)
|
void pcm_boost(bool state)
|
||||||
{
|
{
|
||||||
static bool boost_state = false;
|
static bool boost_state = false;
|
||||||
|
|
@ -121,6 +112,16 @@ void pcm_boost(bool state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Stops the DMA transfer and interrupt */
|
||||||
|
static void dma_stop(void)
|
||||||
|
{
|
||||||
|
pcm_playing = false;
|
||||||
|
|
||||||
|
/* Reset the FIFO */
|
||||||
|
IIS2CONFIG = 0x800;
|
||||||
|
pcm_boost(false);
|
||||||
|
}
|
||||||
|
|
||||||
/* set volume of the main channel */
|
/* set volume of the main channel */
|
||||||
void pcm_set_volume(int volume)
|
void pcm_set_volume(int volume)
|
||||||
{
|
{
|
||||||
|
|
@ -385,6 +386,7 @@ bool pcm_is_lowdata(void)
|
||||||
|
|
||||||
void pcm_crossfade_start(void)
|
void pcm_crossfade_start(void)
|
||||||
{
|
{
|
||||||
|
//logf("cf:%d", audiobuffer_free / CHUNK_SIZE);
|
||||||
if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) {
|
if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) {
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
@ -493,6 +495,7 @@ void pcm_play_init(void)
|
||||||
pcmbuf_read_index = 0;
|
pcmbuf_read_index = 0;
|
||||||
pcmbuf_write_index = 0;
|
pcmbuf_write_index = 0;
|
||||||
pcmbuf_unplayed_bytes = 0;
|
pcmbuf_unplayed_bytes = 0;
|
||||||
|
crossfade_enabled = false;
|
||||||
pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback);
|
pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback);
|
||||||
|
|
||||||
/* Play a small chunk of zeroes to initialize the playback system. */
|
/* Play a small chunk of zeroes to initialize the playback system. */
|
||||||
|
|
@ -501,9 +504,7 @@ void pcm_play_init(void)
|
||||||
memset(&audiobuffer[0], 0, audiobuffer_pos);
|
memset(&audiobuffer[0], 0, audiobuffer_pos);
|
||||||
pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL);
|
pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL);
|
||||||
pcm_play_start();
|
pcm_play_start();
|
||||||
cpu_boost(false);
|
|
||||||
|
|
||||||
crossfade_enabled = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pcm_crossfade_enable(bool on_off)
|
void pcm_crossfade_enable(bool on_off)
|
||||||
|
|
@ -511,6 +512,11 @@ void pcm_crossfade_enable(bool on_off)
|
||||||
crossfade_enabled = on_off;
|
crossfade_enabled = on_off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool pcm_is_crossfade_enabled(void)
|
||||||
|
{
|
||||||
|
return crossfade_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
void pcm_play_start(void)
|
void pcm_play_start(void)
|
||||||
{
|
{
|
||||||
struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index];
|
struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue