diff options
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/apps/playback.c b/apps/playback.c index c053bc1473..03b286c2e9 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -922,6 +922,8 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) | |||
922 | /* Get track metadata if we don't already have it. */ | 922 | /* Get track metadata if we don't already have it. */ |
923 | if (!tracks[track_widx].taginfo_ready) { | 923 | if (!tracks[track_widx].taginfo_ready) { |
924 | if (!get_metadata(&tracks[track_widx],fd,trackname,v1first)) { | 924 | if (!get_metadata(&tracks[track_widx],fd,trackname,v1first)) { |
925 | logf("Metadata error!"); | ||
926 | tracks[track_widx].filesize = 0; | ||
925 | close(fd); | 927 | close(fd); |
926 | return false; | 928 | return false; |
927 | } | 929 | } |
@@ -973,8 +975,10 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) | |||
973 | copy_n = MIN(size - i, copy_n); | 975 | copy_n = MIN(size - i, copy_n); |
974 | copy_n = MIN((int)fill_bytesleft, copy_n); | 976 | copy_n = MIN((int)fill_bytesleft, copy_n); |
975 | rc = read(fd, &codecbuf[buf_widx], copy_n); | 977 | rc = read(fd, &codecbuf[buf_widx], copy_n); |
976 | if (rc <= 0) { | 978 | if (rc < copy_n) { |
977 | logf("File error!"); | 979 | logf("File error!"); |
980 | tracks[track_widx].filesize = 0; | ||
981 | tracks[track_widx].filerem = 0; | ||
978 | close(fd); | 982 | close(fd); |
979 | return false; | 983 | return false; |
980 | } | 984 | } |
@@ -1047,6 +1051,7 @@ void audio_play_start(int offset) | |||
1047 | } else { | 1051 | } else { |
1048 | logf("Failure"); | 1052 | logf("Failure"); |
1049 | } | 1053 | } |
1054 | |||
1050 | pcm_set_boost_mode(false); | 1055 | pcm_set_boost_mode(false); |
1051 | } | 1056 | } |
1052 | 1057 | ||
@@ -1127,11 +1132,12 @@ void initialize_buffer_fill(void) | |||
1127 | fill_bytesleft = codecbuflen - codecbufused; | 1132 | fill_bytesleft = codecbuflen - codecbufused; |
1128 | cur_ti->start_pos = ci.curpos; | 1133 | cur_ti->start_pos = ci.curpos; |
1129 | 1134 | ||
1135 | pcm_set_boost_mode(true); | ||
1136 | |||
1130 | if (filling) | 1137 | if (filling) |
1131 | return ; | 1138 | return ; |
1132 | 1139 | ||
1133 | filling = true; | 1140 | filling = true; |
1134 | pcm_set_boost_mode(true); | ||
1135 | 1141 | ||
1136 | /* Calculate real track count after throwing away old tracks. */ | 1142 | /* Calculate real track count after throwing away old tracks. */ |
1137 | cur_idx = track_ridx; | 1143 | cur_idx = track_ridx; |
@@ -1337,8 +1343,10 @@ bool codec_request_next_track_callback(void) | |||
1337 | yield(); | 1343 | yield(); |
1338 | 1344 | ||
1339 | if (tracks[track_ridx].filesize == 0) { | 1345 | if (tracks[track_ridx].filesize == 0) { |
1340 | logf("No more tracks"); | 1346 | logf("No more tracks [2]"); |
1347 | ci.stop_codec = true; | ||
1341 | new_track = 0; | 1348 | new_track = 0; |
1349 | queue_post(&codec_queue, CODEC_LOAD, 0); | ||
1342 | return false; | 1350 | return false; |
1343 | } | 1351 | } |
1344 | } | 1352 | } |
@@ -1346,9 +1354,10 @@ bool codec_request_next_track_callback(void) | |||
1346 | ci.reload_codec = false; | 1354 | ci.reload_codec = false; |
1347 | 1355 | ||
1348 | if (cur_ti->id3.codectype != tracks[track_ridx].id3.codectype) { | 1356 | if (cur_ti->id3.codectype != tracks[track_ridx].id3.codectype) { |
1357 | logf("New codec:%d/%d", cur_ti->id3.codectype, | ||
1358 | tracks[track_ridx].id3.codectype); | ||
1349 | if (--track_ridx < 0) | 1359 | if (--track_ridx < 0) |
1350 | track_ridx = MAX_TRACK-1; | 1360 | track_ridx = MAX_TRACK-1; |
1351 | logf("New codec"); | ||
1352 | new_track = 0; | 1361 | new_track = 0; |
1353 | return false; | 1362 | return false; |
1354 | } | 1363 | } |
@@ -1386,7 +1395,7 @@ static void initiate_track_change(int peek_index) | |||
1386 | 1395 | ||
1387 | new_track = peek_index; | 1396 | new_track = peek_index; |
1388 | ci.reload_codec = true; | 1397 | ci.reload_codec = true; |
1389 | 1398 | ||
1390 | /* Detect if disk is spinning.. */ | 1399 | /* Detect if disk is spinning.. */ |
1391 | if (filling) { | 1400 | if (filling) { |
1392 | ci.stop_codec = true; | 1401 | ci.stop_codec = true; |
@@ -1396,8 +1405,8 @@ static void initiate_track_change(int peek_index) | |||
1396 | 1405 | ||
1397 | else if (!pcm_crossfade_init()) | 1406 | else if (!pcm_crossfade_init()) |
1398 | pcm_flush_audio(); | 1407 | pcm_flush_audio(); |
1399 | else | 1408 | |
1400 | codec_track_changed(); | 1409 | codec_track_changed(); |
1401 | } | 1410 | } |
1402 | 1411 | ||
1403 | void audio_thread(void) | 1412 | void audio_thread(void) |
@@ -1594,8 +1603,7 @@ void audio_play(int offset) | |||
1594 | ci.stop_codec = true; | 1603 | ci.stop_codec = true; |
1595 | if (!pcm_crossfade_init()) | 1604 | if (!pcm_crossfade_init()) |
1596 | pcm_flush_audio(); | 1605 | pcm_flush_audio(); |
1597 | else | 1606 | codec_track_changed(); |
1598 | codec_track_changed(); | ||
1599 | 1607 | ||
1600 | pcm_play_pause(true); | 1608 | pcm_play_pause(true); |
1601 | paused = false; | 1609 | paused = false; |
@@ -1813,7 +1821,7 @@ void test_buffer_event(struct mp3entry *id3, bool last_track) | |||
1813 | (void)id3; | 1821 | (void)id3; |
1814 | (void)last_track; | 1822 | (void)last_track; |
1815 | 1823 | ||
1816 | logf("be:%d%s", last_track, id3->title); | 1824 | logf("be:%d%s", last_track, id3->path); |
1817 | } | 1825 | } |
1818 | 1826 | ||
1819 | void test_unbuffer_event(struct mp3entry *id3, bool last_track) | 1827 | void test_unbuffer_event(struct mp3entry *id3, bool last_track) |
@@ -1821,7 +1829,7 @@ void test_unbuffer_event(struct mp3entry *id3, bool last_track) | |||
1821 | (void)id3; | 1829 | (void)id3; |
1822 | (void)last_track; | 1830 | (void)last_track; |
1823 | 1831 | ||
1824 | logf("ube:%d%s", last_track, id3->title); | 1832 | logf("ube:%d%s", last_track, id3->path); |
1825 | } | 1833 | } |
1826 | 1834 | ||
1827 | void audio_init(void) | 1835 | void audio_init(void) |