forked from len0rd/rockbox
Track changing works now better (not still perfect).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7090 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
1a7f1f44c7
commit
3e33f85f17
1 changed files with 18 additions and 13 deletions
|
@ -686,7 +686,7 @@ void audio_fill_file_buffer(void)
|
||||||
if (fill_bytesleft == 0)
|
if (fill_bytesleft == 0)
|
||||||
break ;
|
break ;
|
||||||
rc = MIN(conf_filechunk, codecbuflen - buf_widx);
|
rc = MIN(conf_filechunk, codecbuflen - buf_widx);
|
||||||
rc = MIN(rc, (off_t)fill_bytesleft);
|
rc = MIN(rc, fill_bytesleft);
|
||||||
rc = read(current_fd, &codecbuf[buf_widx], rc);
|
rc = read(current_fd, &codecbuf[buf_widx], rc);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
tracks[track_widx].filerem = 0;
|
tracks[track_widx].filerem = 0;
|
||||||
|
@ -810,6 +810,8 @@ bool loadcodec(const char *trackname, bool start_play)
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return false;
|
return false;
|
||||||
buf_widx += rc;
|
buf_widx += rc;
|
||||||
|
codecbufused += rc;
|
||||||
|
fill_bytesleft -= rc;
|
||||||
if (buf_widx >= codecbuflen)
|
if (buf_widx >= codecbuflen)
|
||||||
buf_widx -= codecbuflen;
|
buf_widx -= codecbuflen;
|
||||||
i += rc;
|
i += rc;
|
||||||
|
@ -817,8 +819,6 @@ bool loadcodec(const char *trackname, bool start_play)
|
||||||
close(fd);
|
close(fd);
|
||||||
logf("Done: %dB", i);
|
logf("Done: %dB", i);
|
||||||
|
|
||||||
codecbufused += size;
|
|
||||||
fill_bytesleft -= size;
|
|
||||||
tracks[track_widx].codecsize = size;
|
tracks[track_widx].codecsize = size;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -958,7 +958,7 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
|
||||||
|
|
||||||
if (start_play) {
|
if (start_play) {
|
||||||
track_count++;
|
track_count++;
|
||||||
audiobuffer_add_event(codec_track_changed);
|
codec_track_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do some initial file buffering. */
|
/* Do some initial file buffering. */
|
||||||
|
@ -1047,7 +1047,6 @@ void audio_play_start(int offset)
|
||||||
cur_ti->event_sent = true;
|
cur_ti->event_sent = true;
|
||||||
track_buffer_callback(&cur_ti->id3, true);
|
track_buffer_callback(&cur_ti->id3, true);
|
||||||
}
|
}
|
||||||
ata_sleep();
|
|
||||||
} else {
|
} else {
|
||||||
logf("Failure");
|
logf("Failure");
|
||||||
}
|
}
|
||||||
|
@ -1167,8 +1166,9 @@ void audio_check_buffer(void)
|
||||||
initialize_buffer_fill();
|
initialize_buffer_fill();
|
||||||
|
|
||||||
/* Limit buffering size at first run. */
|
/* Limit buffering size at first run. */
|
||||||
if (conf_bufferlimit && (int)fill_bytesleft >= conf_bufferlimit) {
|
if (conf_bufferlimit && fill_bytesleft > conf_bufferlimit
|
||||||
fill_bytesleft = conf_bufferlimit - codecbufused;
|
- codecbufused) {
|
||||||
|
fill_bytesleft = MAX(0, conf_bufferlimit - codecbufused);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to load remainings of the file. */
|
/* Try to load remainings of the file. */
|
||||||
|
@ -1193,8 +1193,10 @@ void audio_check_buffer(void)
|
||||||
conf_bufferlimit = 0;
|
conf_bufferlimit = 0;
|
||||||
pcm_set_boost_mode(false);
|
pcm_set_boost_mode(false);
|
||||||
|
|
||||||
if (playing)
|
if (playing) {
|
||||||
|
ata_flush();
|
||||||
ata_sleep();
|
ata_sleep();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1281,17 +1283,17 @@ void audio_change_track(void)
|
||||||
|
|
||||||
bool codec_request_next_track_callback(void)
|
bool codec_request_next_track_callback(void)
|
||||||
{
|
{
|
||||||
if (ci.stop_codec || !playing || !queue_empty(&audio_queue))
|
if (ci.stop_codec || !playing)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
logf("Request new track");
|
logf("Request new track");
|
||||||
|
|
||||||
/* Advance to next track. */
|
/* Advance to next track. */
|
||||||
if (ci.reload_codec && new_track > 0) {
|
if (ci.reload_codec && new_track > 0) {
|
||||||
if (!playlist_check(1))
|
if (!playlist_check(new_track))
|
||||||
return false;
|
return false;
|
||||||
last_peek_offset--;
|
last_peek_offset--;
|
||||||
playlist_next(1);
|
playlist_next(new_track);
|
||||||
if (++track_ridx == MAX_TRACK)
|
if (++track_ridx == MAX_TRACK)
|
||||||
track_ridx = 0;
|
track_ridx = 0;
|
||||||
|
|
||||||
|
@ -1311,10 +1313,10 @@ bool codec_request_next_track_callback(void)
|
||||||
|
|
||||||
/* Advance to previous track. */
|
/* Advance to previous track. */
|
||||||
else if (ci.reload_codec && new_track < 0) {
|
else if (ci.reload_codec && new_track < 0) {
|
||||||
if (!playlist_check(-1))
|
if (!playlist_check(new_track))
|
||||||
return false;
|
return false;
|
||||||
last_peek_offset++;
|
last_peek_offset++;
|
||||||
playlist_next(-1);
|
playlist_next(new_track);
|
||||||
if (--track_ridx < 0)
|
if (--track_ridx < 0)
|
||||||
track_ridx = MAX_TRACK-1;
|
track_ridx = MAX_TRACK-1;
|
||||||
if (tracks[track_ridx].filesize == 0 ||
|
if (tracks[track_ridx].filesize == 0 ||
|
||||||
|
@ -1514,6 +1516,9 @@ void codec_thread(void)
|
||||||
codecsize = cur_ti->codecsize;
|
codecsize = cur_ti->codecsize;
|
||||||
if (codecsize == 0) {
|
if (codecsize == 0) {
|
||||||
logf("Codec slot is empty!");
|
logf("Codec slot is empty!");
|
||||||
|
/* Wait for the pcm buffer to go empty */
|
||||||
|
while (pcm_is_playing())
|
||||||
|
yield();
|
||||||
audio_stop_playback();
|
audio_stop_playback();
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue