summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-02-23 21:09:30 +0000
committerThomas Martitz <kugel@rockbox.org>2009-02-23 21:09:30 +0000
commit5e1bab1cd85135a9d666fd278ecc9bf010a67bc8 (patch)
treebddccbde3506e6bce4dc9eacd58cfa3a21c16aab
parent56f4723d197eaa833a802630737f83f299166a7c (diff)
downloadrockbox-5e1bab1cd85135a9d666fd278ecc9bf010a67bc8.tar.gz
rockbox-5e1bab1cd85135a9d666fd278ecc9bf010a67bc8.zip
Fix two rare bugs which caused playback to not unboost. The filling state was not set properly, if there was no space left for the handle for albumart or audio data. but for the handle for metadata. This also adds specific checks for ERR_BUFFER_FULL and appropriate logf messages.
This also appears to fix the constant boosting part of FS#8999 (at least I couldn't reproduce). It does certainly not fix that buffering is stucked. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20093 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playback.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/apps/playback.c b/apps/playback.c
index 3d22b90bf5..156723ce51 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -1727,7 +1727,7 @@ static bool audio_load_track(size_t offset, bool start_play)
1727 { 1727 {
1728 tracks[track_widx].id3_hid = bufopen(trackname, 0, TYPE_ID3); 1728 tracks[track_widx].id3_hid = bufopen(trackname, 0, TYPE_ID3);
1729 1729
1730 if (tracks[track_widx].id3_hid < 0) 1730 if (tracks[track_widx].id3_hid == ERR_BUFFER_FULL)
1731 { 1731 {
1732 /* Buffer is full. */ 1732 /* Buffer is full. */
1733 get_metadata(&lasttrack_id3, fd, trackname); 1733 get_metadata(&lasttrack_id3, fd, trackname);
@@ -1737,6 +1737,13 @@ static bool audio_load_track(size_t offset, bool start_play)
1737 filling = STATE_FULL; 1737 filling = STATE_FULL;
1738 return false; 1738 return false;
1739 } 1739 }
1740 else if (tracks[track_widx].id3_hid < 0)
1741 {
1742 last_peek_offset--;
1743 close(fd);
1744 logf("Could not add metadata handle");
1745 return false;
1746 }
1740 1747
1741 if (track_widx == track_ridx) 1748 if (track_widx == track_ridx)
1742 { 1749 {
@@ -1809,7 +1816,17 @@ static void audio_finish_load_track(void)
1809 tracks[track_widx].aa_hid = bufopen(aa_path, 0, TYPE_BITMAP); 1816 tracks[track_widx].aa_hid = bufopen(aa_path, 0, TYPE_BITMAP);
1810 1817
1811 if(tracks[track_widx].aa_hid == ERR_BUFFER_FULL) 1818 if(tracks[track_widx].aa_hid == ERR_BUFFER_FULL)
1819 {
1820 filling = STATE_FULL;
1821 logf("buffer is full for now");
1812 return; /* No space for track's album art, not an error */ 1822 return; /* No space for track's album art, not an error */
1823 }
1824 else if (tracks[track_widx].aa_hid < 0)
1825 {
1826 /* another error, do not continue either */
1827 logf("Could not add album art handle");
1828 return;
1829 }
1813 } 1830 }
1814 } 1831 }
1815#endif 1832#endif
@@ -1887,8 +1904,19 @@ static void audio_finish_load_track(void)
1887 1904
1888 tracks[track_widx].audio_hid = bufopen(track_id3->path, file_offset, type); 1905 tracks[track_widx].audio_hid = bufopen(track_id3->path, file_offset, type);
1889 1906
1890 if (tracks[track_widx].audio_hid < 0) 1907 /* No space left, not an error */
1908 if (tracks[track_widx].audio_hid == ERR_BUFFER_FULL)
1909 {
1910 filling = STATE_FULL;
1911 logf("buffer is full for now");
1891 return; 1912 return;
1913 }
1914 else if (tracks[track_widx].audio_hid < 0)
1915 {
1916 /* another error, do not continue either */
1917 logf("Could not add audio data handle");
1918 return;
1919 }
1892 1920
1893 /* All required data is now available for the codec. */ 1921 /* All required data is now available for the codec. */
1894 tracks[track_widx].taginfo_ready = true; 1922 tracks[track_widx].taginfo_ready = true;