diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-03 18:36:24 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-03 18:36:24 +0000 |
commit | 9bde0380a6b58610fc8fcc5cdc81b6462f2bb0b9 (patch) | |
tree | f39b08a1b1e5bc6a79cd59a1d0d2ff14b7d9a838 /apps | |
parent | f46c9f204c2d1a4d477364d5f3a87e59e06a0aa9 (diff) | |
download | rockbox-9bde0380a6b58610fc8fcc5cdc81b6462f2bb0b9.tar.gz rockbox-9bde0380a6b58610fc8fcc5cdc81b6462f2bb0b9.zip |
Updated the track_unbuffer event callback.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6995 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/playback.c | 43 | ||||
-rw-r--r-- | apps/playback.h | 2 |
2 files changed, 31 insertions, 14 deletions
diff --git a/apps/playback.c b/apps/playback.c index c5b6fbc6a5..875a157ba4 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -162,7 +162,7 @@ static int new_track; | |||
162 | /* Callback function to call when current track has really changed. */ | 162 | /* Callback function to call when current track has really changed. */ |
163 | void (*track_changed_callback)(struct track_info *ti); | 163 | void (*track_changed_callback)(struct track_info *ti); |
164 | void (*track_buffer_callback)(struct mp3entry *id3, bool last_track); | 164 | void (*track_buffer_callback)(struct mp3entry *id3, bool last_track); |
165 | void (*track_unbuffer_callback)(struct mp3entry *id3, bool disk_spinning); | 165 | void (*track_unbuffer_callback)(struct mp3entry *id3, bool last_track); |
166 | 166 | ||
167 | /* Configuration */ | 167 | /* Configuration */ |
168 | static int conf_bufferlimit; | 168 | static int conf_bufferlimit; |
@@ -598,7 +598,7 @@ void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3, | |||
598 | } | 598 | } |
599 | 599 | ||
600 | void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3, | 600 | void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3, |
601 | bool disk_spinning)) | 601 | bool last_track)) |
602 | { | 602 | { |
603 | track_unbuffer_callback = handler; | 603 | track_unbuffer_callback = handler; |
604 | } | 604 | } |
@@ -990,17 +990,37 @@ void audio_play_start(int offset) | |||
990 | 990 | ||
991 | void audio_clear_track_entries(void) | 991 | void audio_clear_track_entries(void) |
992 | { | 992 | { |
993 | int cur_idx; | 993 | int cur_idx, event_count; |
994 | int i; | 994 | int i; |
995 | 995 | ||
996 | cur_idx = track_widx; | 996 | cur_idx = track_widx; |
997 | event_count = 0; | ||
997 | for (i = 0; i < MAX_TRACK - track_count; i++) { | 998 | for (i = 0; i < MAX_TRACK - track_count; i++) { |
998 | if (++cur_idx >= MAX_TRACK) | 999 | if (++cur_idx >= MAX_TRACK) |
999 | cur_idx = 0; | 1000 | cur_idx = 0; |
1000 | 1001 | ||
1001 | /* Send event to notify that track has finished. */ | 1002 | if (tracks[cur_idx].event_sent) |
1002 | if (track_unbuffer_callback && tracks[cur_idx].event_sent) | 1003 | event_count++; |
1003 | track_unbuffer_callback(&tracks[cur_idx].id3, filling); | 1004 | |
1005 | if (!track_unbuffer_callback) | ||
1006 | memset(&tracks[cur_idx], 0, sizeof(struct track_info)); | ||
1007 | } | ||
1008 | |||
1009 | if (!track_unbuffer_callback) | ||
1010 | return ; | ||
1011 | |||
1012 | cur_idx = track_widx; | ||
1013 | for (i = 0; i < MAX_TRACK - track_count; i++) { | ||
1014 | if (++cur_idx >= MAX_TRACK) | ||
1015 | cur_idx = 0; | ||
1016 | |||
1017 | /* Send an event to notify that track has finished. */ | ||
1018 | if (tracks[cur_idx].event_sent) { | ||
1019 | tracks[cur_idx].event_sent = true; | ||
1020 | event_count--; | ||
1021 | track_unbuffer_callback(&tracks[cur_idx].id3, event_count == 0); | ||
1022 | } | ||
1023 | |||
1004 | memset(&tracks[cur_idx], 0, sizeof(struct track_info)); | 1024 | memset(&tracks[cur_idx], 0, sizeof(struct track_info)); |
1005 | } | 1025 | } |
1006 | } | 1026 | } |
@@ -1163,7 +1183,6 @@ static void audio_stop_playback(void) | |||
1163 | pcm_play_stop(); | 1183 | pcm_play_stop(); |
1164 | pcm_play_pause(true); | 1184 | pcm_play_pause(true); |
1165 | track_count = 0; | 1185 | track_count = 0; |
1166 | filling = true; | ||
1167 | audio_clear_track_entries(); | 1186 | audio_clear_track_entries(); |
1168 | filling = false; | 1187 | filling = false; |
1169 | } | 1188 | } |
@@ -1695,17 +1714,17 @@ void mpeg_id3_options(bool _v1first) | |||
1695 | v1first = _v1first; | 1714 | v1first = _v1first; |
1696 | } | 1715 | } |
1697 | 1716 | ||
1698 | /* | 1717 | |
1699 | void test_buffer_event(struct mp3entry *id3, bool last_track) | 1718 | void test_buffer_event(struct mp3entry *id3, bool last_track) |
1700 | { | 1719 | { |
1701 | logf("be:%d%s", last_track, id3->title); | 1720 | logf("be:%d%s", last_track, id3->title); |
1702 | } | 1721 | } |
1703 | 1722 | ||
1704 | void test_unbuffer_event(struct mp3entry *id3, bool disk_spinning) | 1723 | void test_unbuffer_event(struct mp3entry *id3, bool last_track) |
1705 | { | 1724 | { |
1706 | logf("ube:%d%s", disk_spinning, id3->title); | 1725 | logf("ube:%d%s", last_track, id3->title); |
1707 | } | 1726 | } |
1708 | */ | 1727 | |
1709 | 1728 | ||
1710 | void audio_init(void) | 1729 | void audio_init(void) |
1711 | { | 1730 | { |
@@ -1729,10 +1748,8 @@ void audio_init(void) | |||
1729 | logf("fbuf:%0x", codecbuflen); | 1748 | logf("fbuf:%0x", codecbuflen); |
1730 | logf("mbuf:%0x", MALLOC_BUFSIZE); | 1749 | logf("mbuf:%0x", MALLOC_BUFSIZE); |
1731 | 1750 | ||
1732 | /* | ||
1733 | audio_set_track_buffer_event(test_buffer_event); | 1751 | audio_set_track_buffer_event(test_buffer_event); |
1734 | audio_set_track_unbuffer_event(test_unbuffer_event); | 1752 | audio_set_track_unbuffer_event(test_unbuffer_event); |
1735 | */ | ||
1736 | 1753 | ||
1737 | /* Initialize codec api. */ | 1754 | /* Initialize codec api. */ |
1738 | ci.read_filebuf = codec_filebuf_callback; | 1755 | ci.read_filebuf = codec_filebuf_callback; |
diff --git a/apps/playback.h b/apps/playback.h index 8148a3445c..b00d5c3e0e 100644 --- a/apps/playback.h +++ b/apps/playback.h | |||
@@ -66,7 +66,7 @@ void audio_set_track_changed_event(void (*handler)(struct track_info *ti)); | |||
66 | void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3, | 66 | void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3, |
67 | bool last_track)); | 67 | bool last_track)); |
68 | void audio_set_track_unbufer_event(void (*handler)(struct mp3entry *id3, | 68 | void audio_set_track_unbufer_event(void (*handler)(struct mp3entry *id3, |
69 | bool disk_spinning)); | 69 | bool last_track)); |
70 | void audio_invalidate_tracks(void); | 70 | void audio_invalidate_tracks(void); |
71 | 71 | ||
72 | #endif | 72 | #endif |