diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/playback.c | 55 | ||||
-rw-r--r-- | apps/playback.h | 6 | ||||
-rw-r--r-- | apps/tagtree.c | 6 |
3 files changed, 17 insertions, 50 deletions
diff --git a/apps/playback.c b/apps/playback.c index 793832322b..5cd8e6def3 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -252,9 +252,9 @@ static bool skipped_during_pause = false; /* Do we need to clear the PCM buffer | |||
252 | /* When the playing track has changed from the user's perspective */ | 252 | /* When the playing track has changed from the user's perspective */ |
253 | void (*track_changed_callback)(struct mp3entry *id3) = NULL; | 253 | void (*track_changed_callback)(struct mp3entry *id3) = NULL; |
254 | /* When a track has been buffered */ | 254 | /* When a track has been buffered */ |
255 | void (*track_buffer_callback)(struct mp3entry *id3, bool last_track) = NULL; | 255 | void (*track_buffer_callback)(struct mp3entry *id3) = NULL; |
256 | /* When a track's buffer has been overwritten or cleared */ | 256 | /* When a track's buffer has been overwritten or cleared */ |
257 | void (*track_unbuffer_callback)(struct mp3entry *id3, bool last_track) = NULL; | 257 | void (*track_unbuffer_callback)(struct mp3entry *id3) = NULL; |
258 | 258 | ||
259 | static size_t buffer_margin = 0; /* Buffer margin aka anti-skip buffer (A/C-) */ | 259 | static size_t buffer_margin = 0; /* Buffer margin aka anti-skip buffer (A/C-) */ |
260 | 260 | ||
@@ -2129,7 +2129,6 @@ static void audio_update_trackinfo(void) | |||
2129 | static void audio_clear_track_entries(bool clear_unbuffered) | 2129 | static void audio_clear_track_entries(bool clear_unbuffered) |
2130 | { | 2130 | { |
2131 | int cur_idx = track_widx; | 2131 | int cur_idx = track_widx; |
2132 | int last_idx = -1; | ||
2133 | 2132 | ||
2134 | logf("Clearing tracks:%d/%d, %d", track_ridx, track_widx, clear_unbuffered); | 2133 | logf("Clearing tracks:%d/%d, %d", track_ridx, track_widx, clear_unbuffered); |
2135 | 2134 | ||
@@ -2146,30 +2145,16 @@ static void audio_clear_track_entries(bool clear_unbuffered) | |||
2146 | * otherwise clear the track if that option is selected */ | 2145 | * otherwise clear the track if that option is selected */ |
2147 | if (tracks[cur_idx].event_sent) | 2146 | if (tracks[cur_idx].event_sent) |
2148 | { | 2147 | { |
2149 | if (last_idx >= 0) | 2148 | /* If there is an unbuffer callback, call it, otherwise, |
2150 | { | 2149 | * just clear the track */ |
2151 | /* If there is an unbuffer callback, call it, otherwise, | 2150 | if (track_unbuffer_callback && tracks[cur_idx].id3_hid > 0) |
2152 | * just clear the track */ | 2151 | track_unbuffer_callback(bufgetid3(tracks[cur_idx].id3_hid)); |
2153 | if (track_unbuffer_callback && tracks[last_idx].id3_hid > 0) | ||
2154 | track_unbuffer_callback(bufgetid3(tracks[last_idx].id3_hid), false); | ||
2155 | 2152 | ||
2156 | clear_track_info(&tracks[last_idx]); | 2153 | clear_track_info(&tracks[cur_idx]); |
2157 | } | ||
2158 | last_idx = cur_idx; | ||
2159 | } | 2154 | } |
2160 | else if (clear_unbuffered) | 2155 | else if (clear_unbuffered) |
2161 | clear_track_info(&tracks[cur_idx]); | 2156 | clear_track_info(&tracks[cur_idx]); |
2162 | } | 2157 | } |
2163 | |||
2164 | /* We clear the previous instance of a buffered track throughout | ||
2165 | * the above loop to facilitate 'last' detection. Clear/notify | ||
2166 | * the last track here */ | ||
2167 | if (last_idx >= 0) | ||
2168 | { | ||
2169 | if (track_unbuffer_callback && tracks[last_idx].id3_hid > 0) | ||
2170 | track_unbuffer_callback(bufgetid3(tracks[last_idx].id3_hid), true); | ||
2171 | clear_track_info(&tracks[last_idx]); | ||
2172 | } | ||
2173 | } | 2158 | } |
2174 | 2159 | ||
2175 | static bool audio_release_tracks(void) | 2160 | static bool audio_release_tracks(void) |
@@ -2527,7 +2512,6 @@ static bool audio_load_track(int offset, bool start_play) | |||
2527 | static void audio_generate_postbuffer_events(void) | 2512 | static void audio_generate_postbuffer_events(void) |
2528 | { | 2513 | { |
2529 | int cur_idx; | 2514 | int cur_idx; |
2530 | int last_idx = -1; | ||
2531 | 2515 | ||
2532 | logf("Postbuffer:%d/%d",track_ridx,track_widx); | 2516 | logf("Postbuffer:%d/%d",track_ridx,track_widx); |
2533 | 2517 | ||
@@ -2538,27 +2522,16 @@ static void audio_generate_postbuffer_events(void) | |||
2538 | while (1) { | 2522 | while (1) { |
2539 | if (!tracks[cur_idx].event_sent) | 2523 | if (!tracks[cur_idx].event_sent) |
2540 | { | 2524 | { |
2541 | if (last_idx >= 0 && !tracks[last_idx].event_sent) | 2525 | /* Mark the event 'sent' even if we don't really send one */ |
2542 | { | 2526 | tracks[cur_idx].event_sent = true; |
2543 | /* Mark the event 'sent' even if we don't really send one */ | 2527 | if (track_buffer_callback && tracks[cur_idx].id3_hid > 0) |
2544 | tracks[last_idx].event_sent = true; | 2528 | track_buffer_callback(bufgetid3(tracks[cur_idx].id3_hid)); |
2545 | if (track_buffer_callback && tracks[last_idx].id3_hid > 0) | ||
2546 | track_buffer_callback(bufgetid3(tracks[last_idx].id3_hid), false); | ||
2547 | } | ||
2548 | last_idx = cur_idx; | ||
2549 | } | 2529 | } |
2550 | if (cur_idx == track_widx) | 2530 | if (cur_idx == track_widx) |
2551 | break; | 2531 | break; |
2552 | cur_idx++; | 2532 | cur_idx++; |
2553 | cur_idx &= MAX_TRACK_MASK; | 2533 | cur_idx &= MAX_TRACK_MASK; |
2554 | } | 2534 | } |
2555 | |||
2556 | if (last_idx >= 0 && !tracks[last_idx].event_sent) | ||
2557 | { | ||
2558 | tracks[last_idx].event_sent = true; | ||
2559 | if (track_buffer_callback && tracks[last_idx].id3_hid > 0) | ||
2560 | track_buffer_callback(bufgetid3(tracks[last_idx].id3_hid), true); | ||
2561 | } | ||
2562 | } | 2535 | } |
2563 | } | 2536 | } |
2564 | 2537 | ||
@@ -2767,14 +2740,12 @@ skip_done: | |||
2767 | return Q_CODEC_REQUEST_COMPLETE; | 2740 | return Q_CODEC_REQUEST_COMPLETE; |
2768 | } | 2741 | } |
2769 | 2742 | ||
2770 | void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3, | 2743 | void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3)) |
2771 | bool last_track)) | ||
2772 | { | 2744 | { |
2773 | track_buffer_callback = handler; | 2745 | track_buffer_callback = handler; |
2774 | } | 2746 | } |
2775 | 2747 | ||
2776 | void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3, | 2748 | void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3)) |
2777 | bool last_track)) | ||
2778 | { | 2749 | { |
2779 | track_unbuffer_callback = handler; | 2750 | track_unbuffer_callback = handler; |
2780 | } | 2751 | } |
diff --git a/apps/playback.h b/apps/playback.h index 9088af9b6e..b005e63b3c 100644 --- a/apps/playback.h +++ b/apps/playback.h | |||
@@ -42,10 +42,8 @@ | |||
42 | /* Functions */ | 42 | /* Functions */ |
43 | const char * get_codec_filename(int cod_spec); | 43 | const char * get_codec_filename(int cod_spec); |
44 | void audio_set_track_changed_event(void (*handler)(struct mp3entry *id3)); | 44 | void audio_set_track_changed_event(void (*handler)(struct mp3entry *id3)); |
45 | void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3, | 45 | void audio_set_track_buffer_event(void (*handler)(struct mp3entry *id3)); |
46 | bool last_track)); | 46 | void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3)); |
47 | void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3, | ||
48 | bool last_track)); | ||
49 | void voice_wait(void); | 47 | void voice_wait(void); |
50 | 48 | ||
51 | #if CONFIG_CODEC == SWCODEC /* This #ifdef is better here than gui/gwps.c */ | 49 | #if CONFIG_CODEC == SWCODEC /* This #ifdef is better here than gui/gwps.c */ |
diff --git a/apps/tagtree.c b/apps/tagtree.c index c0d9f0f425..60bdfb2c0e 100644 --- a/apps/tagtree.c +++ b/apps/tagtree.c | |||
@@ -633,10 +633,9 @@ static int compare(const void *p1, const void *p2) | |||
633 | return strncasecmp(e1->name, e2->name, MAX_PATH); | 633 | return strncasecmp(e1->name, e2->name, MAX_PATH); |
634 | } | 634 | } |
635 | 635 | ||
636 | static void tagtree_buffer_event(struct mp3entry *id3, bool last_track) | 636 | static void tagtree_buffer_event(struct mp3entry *id3) |
637 | { | 637 | { |
638 | (void)id3; | 638 | (void)id3; |
639 | (void)last_track; | ||
640 | 639 | ||
641 | /* Do not gather data unless proper setting has been enabled. */ | 640 | /* Do not gather data unless proper setting has been enabled. */ |
642 | if (!global_settings.runtimedb) | 641 | if (!global_settings.runtimedb) |
@@ -663,9 +662,8 @@ static void tagtree_buffer_event(struct mp3entry *id3, bool last_track) | |||
663 | tagcache_search_finish(&tcs); | 662 | tagcache_search_finish(&tcs); |
664 | } | 663 | } |
665 | 664 | ||
666 | static void tagtree_unbuffer_event(struct mp3entry *id3, bool last_track) | 665 | static void tagtree_unbuffer_event(struct mp3entry *id3) |
667 | { | 666 | { |
668 | (void)last_track; | ||
669 | long playcount; | 667 | long playcount; |
670 | long playtime; | 668 | long playtime; |
671 | long lastplayed; | 669 | long lastplayed; |