summaryrefslogtreecommitdiff
path: root/apps/playback.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 5721e7c21b..e6cc68af6b 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -73,7 +73,7 @@ static volatile bool paused;
73#define CODEC_WAVPACK "/.rockbox/codecs/wavpack.codec"; 73#define CODEC_WAVPACK "/.rockbox/codecs/wavpack.codec";
74 74
75#define AUDIO_FILL_CYCLE (1024*256) 75#define AUDIO_FILL_CYCLE (1024*256)
76#define AUDIO_DEFAULT_WATERMARK (1024*256) 76#define AUDIO_DEFAULT_WATERMARK (1024*512)
77#define AUDIO_DEFAULT_FILECHUNK (1024*32) 77#define AUDIO_DEFAULT_FILECHUNK (1024*32)
78 78
79#define AUDIO_PLAY 1 79#define AUDIO_PLAY 1
@@ -724,11 +724,12 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
724 off_t size; 724 off_t size;
725 int rc, i; 725 int rc, i;
726 int copy_n; 726 int copy_n;
727 727
728 if (track_count >= MAX_TRACK || tracks[track_widx].filesize != 0 728 if (track_count >= MAX_TRACK || tracks[track_widx].filesize != 0
729 || current_fd >= 0) 729 || current_fd >= 0)
730 return false; 730 return false;
731 731
732 logf("Buffering track:%d/%d", track_widx, track_ridx);
732 trackname = playlist_peek(peek_offset); 733 trackname = playlist_peek(peek_offset);
733 if (!trackname) { 734 if (!trackname) {
734 logf("End-of-playlist"); 735 logf("End-of-playlist");
@@ -737,8 +738,10 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
737 } 738 }
738 739
739 fd = open(trackname, O_RDONLY); 740 fd = open(trackname, O_RDONLY);
740 if (fd < 0) 741 if (fd < 0) {
742 logf("Open failed");
741 return false; 743 return false;
744 }
742 745
743 size = filesize(fd); 746 size = filesize(fd);
744 tracks[track_widx].filerem = size; 747 tracks[track_widx].filerem = size;
@@ -770,7 +773,6 @@ bool audio_load_track(int offset, bool start_play, int peek_offset)
770 tracks[track_widx].start_pos = 0; 773 tracks[track_widx].start_pos = 0;
771 774
772 //logf("%s", trackname); 775 //logf("%s", trackname);
773 logf("Buffering track:%d/%d", track_widx, track_ridx);
774 776
775 if (!get_metadata(&tracks[track_widx],fd,trackname,v1first)) { 777 if (!get_metadata(&tracks[track_widx],fd,trackname,v1first)) {
776 close(fd); 778 close(fd);
@@ -896,10 +898,15 @@ void initialize_buffer_fill(void)
896{ 898{
897 int cur_idx, i; 899 int cur_idx, i;
898 900
899 pcm_set_boost_mode(true);
900 901
901 fill_bytesleft = codecbuflen - codecbufused; 902 fill_bytesleft = codecbuflen - codecbufused;
902 tracks[track_widx].start_pos = ci.curpos; 903 tracks[track_widx].start_pos = ci.curpos;
904
905 if (filling)
906 return ;
907
908 filling = true;
909 pcm_set_boost_mode(true);
903 910
904 /* Calculate real track count after throwing away old tracks. */ 911 /* Calculate real track count after throwing away old tracks. */
905 cur_idx = track_ridx; 912 cur_idx = track_ridx;
@@ -926,10 +933,7 @@ void audio_check_buffer(void)
926 || !playing || ci.stop_codec || ci.reload_codec) && !filling) 933 || !playing || ci.stop_codec || ci.reload_codec) && !filling)
927 return ; 934 return ;
928 935
929 if (!filling) { 936 initialize_buffer_fill();
930 initialize_buffer_fill();
931 filling = true;
932 }
933 937
934 /* Limit buffering size at first run. */ 938 /* Limit buffering size at first run. */
935 if (conf_bufferlimit && (int)fill_bytesleft >= conf_bufferlimit) { 939 if (conf_bufferlimit && (int)fill_bytesleft >= conf_bufferlimit) {
@@ -1097,6 +1101,11 @@ void audio_invalidate_tracks(void)
1097 } 1101 }
1098 1102
1099 track_count = 1; 1103 track_count = 1;
1104 last_peek_offset = 1;
1105 if (cur_ti->filerem == 0 && current_fd >= 0) {
1106 close(current_fd);
1107 current_fd = -1;
1108 }
1100 track_widx = track_ridx; 1109 track_widx = track_ridx;
1101 audio_clear_track_entries(); 1110 audio_clear_track_entries();
1102 codecbufused = cur_ti->available; 1111 codecbufused = cur_ti->available;