From a3087e4fb0e268cd9a24f50494ab7e93df5e739c Mon Sep 17 00:00:00 2001 From: Steve Bavin Date: Thu, 31 Aug 2006 10:01:07 +0000 Subject: Add logging for all playback queueing, for the simulator at least git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10823 a1c6a512-1295-4272-9138-f99709370657 --- apps/playback.c | 223 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 164 insertions(+), 59 deletions(-) diff --git a/apps/playback.c b/apps/playback.c index 3c8585b50f..ed8bb10caa 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -97,6 +97,17 @@ static volatile bool paused; * for their correct seeek target, 32k seems a good size */ #define AUDIO_REBUFFER_GUESS_SIZE (1024*32) +/* macros to enable logf for queues */ +#ifdef SIMULATOR +#define LOGF_QUEUES /* Define this for logf output of all queuing */ +#endif + +#ifdef LOGF_QUEUES +#define LOGFQUEUE(s) logf("%s", s) +#else +#define LOGFQUEUE(s) +#endif + enum { Q_AUDIO_PLAY = 1, Q_AUDIO_STOP, @@ -266,7 +277,7 @@ static int mp3_get_file_pos(void); static void audio_clear_track_entries( bool clear_buffered, bool clear_unbuffered, bool may_yield); -static bool initialize_buffer_fill(bool clear_tracks); +static bool audio_initialize_buffer_fill(bool clear_tracks); static void audio_fill_file_buffer( bool start_play, bool rebuffer, size_t offset); @@ -575,7 +586,7 @@ int audio_track_count(void) return 0; } -static void advance_buffer_counters(size_t amount) +static void codec_advance_buffer_counters(size_t amount) { buf_ridx += amount; @@ -590,7 +601,10 @@ static void advance_buffer_counters(size_t amount) if (!pcmbuf_is_lowdata() && !filling) { if (conf_watermark && filebufused <= conf_watermark && playing) + { + LOGFQUEUE("codec > audio Q_AUDIO_FILL_BUFFER"); queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); + } } } @@ -624,7 +638,10 @@ static size_t codec_filebuf_callback(void *ptr, size_t size) while (copy_n > cur_ti->available) { if (!filling) + { + LOGFQUEUE("codec > audio Q_AUDIO_FILL_BUFFER"); queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); + } sleep(1); if (ci.stop_codec || ci.new_track) @@ -640,7 +657,7 @@ static size_t codec_filebuf_callback(void *ptr, size_t size) } /* Update read and other position pointers */ - advance_buffer_counters(copy_n); + codec_advance_buffer_counters(copy_n); /* Return the actual amount of data copied to the buffer */ return copy_n; @@ -673,15 +690,20 @@ static void* voice_request_buffer_callback(size_t *realsize, size_t reqsize) switch (ev.id) { case Q_AUDIO_PLAY: + LOGFQUEUE("voice < Q_AUDIO_PLAY"); if (playing) swap_codec(); break; + #if defined(HAVE_RECORDING) && !defined(SIMULATOR) case Q_ENCODER_RECORD: + LOGFQUEUE("voice < Q_ENCODER_RECORD"); swap_codec(); break; #endif + case Q_VOICE_STOP: + LOGFQUEUE("voice < Q_VOICE_STOP"); if (voice_is_playing) { /* Clear the current buffer */ @@ -699,7 +721,7 @@ static void* voice_request_buffer_callback(size_t *realsize, size_t reqsize) break; case SYS_USB_CONNECTED: - logf("USB: Voice codec"); + LOGFQUEUE("voice < SYS_USB_CONNECTED"); usb_acknowledge(SYS_USB_CONNECTED_ACK); if (audio_codec_loaded) swap_codec(); @@ -707,6 +729,7 @@ static void* voice_request_buffer_callback(size_t *realsize, size_t reqsize) break; case Q_VOICE_PLAY: + LOGFQUEUE("voice < Q_VOICE_PLAY"); { struct voice_info *voice_data; voice_is_playing = true; @@ -716,8 +739,13 @@ static void* voice_request_buffer_callback(size_t *realsize, size_t reqsize) voicebuf = voice_data->buf; voice_getmore = voice_data->callback; } + case SYS_TIMEOUT: + LOGFQUEUE("voice < SYS_TIMEOUT"); goto voice_play_clip; + + default: + LOGFQUEUE("voice < default"); } } @@ -731,6 +759,7 @@ voice_play_clip: /* If this clip is done */ if (!voice_remaining) { + LOGFQUEUE("voice > voice Q_VOICE_STOP"); queue_post(&voice_codec_queue, Q_VOICE_STOP, 0); /* Force pcm playback. */ if (!pcm_is_playing()) @@ -766,7 +795,10 @@ static void* codec_request_buffer_callback(size_t *realsize, size_t reqsize) while (copy_n > cur_ti->available) { if (!filling) + { + LOGFQUEUE("codec > audio Q_AUDIO_FILL_BUFFER"); queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); + } sleep(1); if (ci.stop_codec || ci.new_track) @@ -990,6 +1022,7 @@ static void audio_check_new_track(void) } else { + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_FAILED"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_FAILED, 0); return; } @@ -1003,6 +1036,7 @@ static void audio_check_new_track(void) { if (ci.new_track >= 0) { + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_FAILED"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_FAILED, 0); return; } @@ -1010,6 +1044,7 @@ static void audio_check_new_track(void) while (!playlist_check(++ci.new_track)) if (ci.new_track >= 0) { + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_FAILED"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_FAILED, 0); return; } @@ -1019,6 +1054,7 @@ static void audio_check_new_track(void) if (playlist_next(ci.new_track) < 0) { + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_FAILED"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_FAILED, 0); return; } @@ -1105,10 +1141,11 @@ static void audio_check_new_track(void) skip_done: audio_update_trackinfo(); + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_COMPLETE"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_COMPLETE, 0); } -static void rebuffer_and_seek(size_t newpos) +static void audio_rebuffer_and_seek(size_t newpos) { int fd; char *trackname; @@ -1119,7 +1156,7 @@ static void rebuffer_and_seek(size_t newpos) fd = open(trackname, O_RDONLY); if (fd < 0) { - logf("Open failed!"); + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_FAILED"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_FAILED, 0); return; } @@ -1139,7 +1176,7 @@ static void rebuffer_and_seek(size_t newpos) last_peek_offset = 0; filling = false; - initialize_buffer_fill(true); + audio_initialize_buffer_fill(true); filling = true; if (newpos > conf_preseek) { @@ -1157,6 +1194,7 @@ static void rebuffer_and_seek(size_t newpos) lseek(current_fd, cur_ti->start_pos, SEEK_SET); + LOGFQUEUE("audio > codec Q_CODEC_REQUEST_COMPLETE"); queue_post(&codec_callback_queue, Q_CODEC_REQUEST_COMPLETE, 0); } @@ -1179,6 +1217,7 @@ static void codec_advance_buffer_callback(size_t amount) { struct event ev; + LOGFQUEUE("codec > audio Q_AUDIO_REBUFFER_SEEK"); queue_post(&audio_queue, Q_AUDIO_REBUFFER_SEEK, (void *)(ci.curpos + amount)); @@ -1186,18 +1225,22 @@ static void codec_advance_buffer_callback(size_t amount) switch (ev.id) { case Q_CODEC_REQUEST_FAILED: + LOGFQUEUE("codec < Q_CODEC_REQUEST_FAILED"); ci.stop_codec = true; - case Q_CODEC_REQUEST_COMPLETE: return; - + + case Q_CODEC_REQUEST_COMPLETE: + LOGFQUEUE("codec < Q_CODEC_REQUEST_COMPLETE"); + return; + default: - logf("Bad event on ccq"); + LOGFQUEUE("codec < default"); ci.stop_codec = true; return; } } - advance_buffer_counters(amount); + codec_advance_buffer_counters(amount); codec_set_offset_callback(ci.curpos); } @@ -1264,6 +1307,8 @@ static bool codec_seek_buffer_callback(size_t newpos) { int difference; + logf("codec_seek_buffer_callback"); + if (newpos >= cur_ti->filesize) newpos = cur_ti->filesize - 1; @@ -1286,20 +1331,23 @@ static bool codec_seek_buffer_callback(size_t newpos) { struct event ev; + LOGFQUEUE("codec > audio Q_AUDIO_REBUFFER_SEEK"); queue_post(&audio_queue, Q_AUDIO_REBUFFER_SEEK, (void *)newpos); queue_wait(&codec_callback_queue, &ev); switch (ev.id) { case Q_CODEC_REQUEST_COMPLETE: + LOGFQUEUE("codec < Q_CODEC_REQUEST_COMPLETE"); return true; case Q_CODEC_REQUEST_FAILED: + LOGFQUEUE("codec < Q_CODEC_REQUEST_FAILED"); ci.stop_codec = true; return false; default: - logf("Bad event on ccq"); + LOGFQUEUE("codec < default"); return false; } } @@ -1373,6 +1421,7 @@ static void codec_track_changed(void) { automatic_skip = false; track_changed = true; + LOGFQUEUE("codec > audio Q_AUDIO_TRACK_CHANGED"); queue_post(&audio_queue, Q_AUDIO_TRACK_CHANGED, 0); } @@ -1385,7 +1434,7 @@ static void pcmbuf_track_changed_callback(void) /* Yield to codecs for as long as possible if they are in need of data * return true if the caller should break to let the audio thread process * new events */ -static bool yield_codecs(void) +static bool audio_yield_codecs(void) { yield(); @@ -1497,7 +1546,7 @@ static void audio_read_file(bool quick) /* Let the codec process until it is out of the danger zone, or there * is an event to handle. In the latter case, break this fill cycle * immediately */ - if (quick || yield_codecs()) + if (quick || audio_yield_codecs()) break; } @@ -1568,7 +1617,7 @@ static const char * get_codec_filename(int enc_spec) return fname; } /* get_codec_filename */ -static bool loadcodec(bool start_play) +static bool audio_loadcodec(bool start_play) { size_t size; int fd; @@ -1594,6 +1643,7 @@ static bool loadcodec(bool start_play) ci.taginfo_ready = &cur_ti->taginfo_ready; ci.curpos = 0; playing = true; + LOGFQUEUE("codec > codec Q_CODEC_LOAD_DISK"); queue_post(&codec_queue, Q_CODEC_LOAD_DISK, (void *)codec_fn); return true; } @@ -1655,7 +1705,7 @@ static bool loadcodec(bool start_play) tracks[track_widx].codecsize += rc; - yield_codecs(); + audio_yield_codecs(); } tracks[track_widx].has_codec = true; @@ -1804,7 +1854,7 @@ static bool audio_load_track(int offset, bool start_play, bool rebuffer) /* Load the codec. */ tracks[track_widx].codecbuf = &filebuf[buf_widx]; - if (!loadcodec(start_play)) + if (!audio_loadcodec(start_play)) { if (tracks[track_widx].codecsize) { @@ -1919,7 +1969,7 @@ static void audio_clear_track_entries( if (track_unbuffer_callback) { if (may_yield) - yield_codecs(); + audio_yield_codecs(); track_unbuffer_callback(&tracks[last_idx].id3, false); } @@ -1943,7 +1993,7 @@ static void audio_clear_track_entries( } } -static void stop_codec_flush(void) +static void audio_stop_codec_flush(void) { ci.stop_codec = true; pcmbuf_pause(true); @@ -1974,7 +2024,7 @@ static void audio_stop_playback(void) playing = false; filling = false; paused = false; - stop_codec_flush(); + audio_stop_codec_flush(); if (current_fd >= 0) { @@ -1995,7 +2045,7 @@ static void audio_play_start(size_t offset) /* Wait for any previously playing audio to flush - TODO: Not necessary? */ while (audio_codec_loaded) - stop_codec_flush(); + audio_stop_codec_flush(); track_changed = true; playlist_end = false; @@ -2024,7 +2074,7 @@ static void audio_play_start(size_t offset) } /* Send callback events to notify about new tracks. */ -static void generate_postbuffer_events(void) +static void audio_generate_postbuffer_events(void) { int cur_idx; int last_idx = -1; @@ -2065,7 +2115,7 @@ static void generate_postbuffer_events(void) } } -static bool initialize_buffer_fill(bool clear_tracks) +static bool audio_initialize_buffer_fill(bool clear_tracks) { /* Don't initialize if we're already initialized */ if (filling) @@ -2105,7 +2155,7 @@ static void audio_fill_file_buffer( { bool had_next_track = audio_next_track() != NULL; - if (!initialize_buffer_fill(!start_play)) + if (!audio_initialize_buffer_fill(!start_play)) return ; /* If we have a partially buffered track, continue loading, @@ -2123,7 +2173,7 @@ static void audio_fill_file_buffer( { read_next_metadata(); - generate_postbuffer_events(); + audio_generate_postbuffer_events(); filling = false; #ifndef SIMULATOR @@ -2133,12 +2183,13 @@ static void audio_fill_file_buffer( } } -static void track_skip_done(bool was_manual) +static void codec_track_skip_done(bool was_manual) { /* Manual track change (always crossfade or flush audio). */ if (was_manual) { pcmbuf_crossfade_init(true); + LOGFQUEUE("codec > audio Q_AUDIO_TRACK_CHANGED"); queue_post(&audio_queue, Q_AUDIO_TRACK_CHANGED, 0); } /* Automatic track change w/crossfade, if not in "Track Skip Only" mode. */ @@ -2156,7 +2207,7 @@ static void track_skip_done(bool was_manual) } } -static bool load_next_track(void) +static bool codec_load_next_track(void) { struct event ev; @@ -2176,6 +2227,7 @@ static bool load_next_track(void) } cpu_boost(true); + LOGFQUEUE("codec > audio Q_AUDIO_CHECK_NEW_TRACK"); queue_post(&audio_queue, Q_AUDIO_CHECK_NEW_TRACK, 0); while (1) { @@ -2192,14 +2244,18 @@ static bool load_next_track(void) switch (ev.id) { case Q_CODEC_REQUEST_COMPLETE: - track_skip_done(!automatic_skip); + LOGFQUEUE("codec < Q_CODEC_REQUEST_COMPLETE"); + codec_track_skip_done(!automatic_skip); return true; + case Q_CODEC_REQUEST_FAILED: + LOGFQUEUE("codec < Q_CODEC_REQUEST_FAILED"); ci.new_track = 0; ci.stop_codec = true; return false; + default: - logf("Bad event on ccq"); + LOGFQUEUE("codec < default"); ci.stop_codec = true; return false; } @@ -2220,7 +2276,7 @@ static bool codec_request_next_track_callback(void) prev_codectype = get_codec_base_type(cur_ti->id3.codectype); - if (!load_next_track()) + if (!codec_load_next_track()) return false; /* Check if the next codec is the same file. */ @@ -2294,7 +2350,7 @@ static void audio_new_playlist(void) audio_fill_file_buffer(false, true, 0); } -static void initiate_track_change(long direction) +static void audio_initiate_track_change(long direction) { if (playlist_check(direction)) { @@ -2307,7 +2363,7 @@ static void initiate_track_change(long direction) } } -static void initiate_dir_change(long direction) +static void audio_initiate_dir_change(long direction) { playlist_end = false; dir_skip = true; @@ -2333,6 +2389,7 @@ void audio_thread(void) switch (ev.id) { case Q_AUDIO_FILL_BUFFER: + LOGFQUEUE("audio < Q_AUDIO_FILL_BUFFER"); if (!filling) if (!playing || playlist_end || ci.stop_codec) break; @@ -2340,70 +2397,71 @@ void audio_thread(void) break; case Q_AUDIO_PLAY: - logf("starting..."); + LOGFQUEUE("audio < Q_AUDIO_PLAY"); audio_clear_track_entries(true, false, true); audio_play_start((size_t)ev.data); break ; case Q_AUDIO_STOP: - logf("audio_stop"); + LOGFQUEUE("audio < Q_AUDIO_STOP"); audio_stop_playback(); break ; case Q_AUDIO_PAUSE: - logf("audio_%s",ev.data?"pause":"resume"); + LOGFQUEUE("audio < Q_AUDIO_PAUSE"); pcmbuf_pause((bool)ev.data); paused = (bool)ev.data; break ; case Q_AUDIO_SKIP: - logf("audio_skip"); - initiate_track_change((long)ev.data); + LOGFQUEUE("audio < Q_AUDIO_SKIP"); + audio_initiate_track_change((long)ev.data); break; case Q_AUDIO_PRE_FF_REWIND: + LOGFQUEUE("audio < Q_AUDIO_PRE_FF_REWIND"); if (!playing) break; - logf("pre_ff_rewind"); pcmbuf_pause(true); break; case Q_AUDIO_FF_REWIND: + LOGFQUEUE("audio < Q_AUDIO_FF_REWIND"); if (!playing) break ; - logf("ff_rewind"); ci.seek_time = (long)ev.data+1; break ; case Q_AUDIO_REBUFFER_SEEK: - logf("Re-buffering song w/seek"); - rebuffer_and_seek((size_t)ev.data); + LOGFQUEUE("audio < Q_AUDIO_REBUFFER_SEEK"); + audio_rebuffer_and_seek((size_t)ev.data); break; case Q_AUDIO_CHECK_NEW_TRACK: - logf("Check new track buffer"); + LOGFQUEUE("audio < Q_AUDIO_CHECK_NEW_TRACK"); audio_check_new_track(); break; case Q_AUDIO_DIR_SKIP: - logf("audio_dir_skip"); + LOGFQUEUE("audio < Q_AUDIO_DIR_SKIP"); playlist_end = false; if (global_settings.beep) pcmbuf_beep(5000, 100, 2500*global_settings.beep); - initiate_dir_change((long)ev.data); + audio_initiate_dir_change((long)ev.data); break; case Q_AUDIO_NEW_PLAYLIST: - logf("new_playlist"); + LOGFQUEUE("audio < Q_AUDIO_NEW_PLAYLIST"); audio_new_playlist(); break; case Q_AUDIO_FLUSH: - logf("flush & reload"); + LOGFQUEUE("audio < Q_AUDIO_FLUSH"); audio_invalidate_tracks(); break ; case Q_AUDIO_TRACK_CHANGED: + LOGFQUEUE("audio < Q_AUDIO_TRACK_CHANGED"); if (track_changed_callback) track_changed_callback(&cur_ti->id3); track_changed = true; @@ -2412,14 +2470,19 @@ void audio_thread(void) #ifndef SIMULATOR case SYS_USB_CONNECTED: - logf("USB: Audio core"); + LOGFQUEUE("audio < SYS_USB_CONNECTED"); audio_stop_playback(); usb_acknowledge(SYS_USB_CONNECTED_ACK); usb_wait_for_disconnect(&audio_queue); break ; #endif + case SYS_TIMEOUT: + LOGFQUEUE("audio < SYS_TIMEOUT"); break; + + default: + LOGFQUEUE("audio < default"); } } } @@ -2436,10 +2499,13 @@ static void codec_thread(void) switch (ev.id) { case Q_CODEC_LOAD_DISK: - logf("Codec load disk"); + LOGFQUEUE("codec < Q_CODEC_LOAD_DISK"); audio_codec_loaded = true; if (voice_codec_loaded) + { + LOGFQUEUE("codec > voice Q_AUDIO_PLAY"); queue_post(&voice_codec_queue, Q_AUDIO_PLAY, 0); + } mutex_lock(&mutex_codecthread); current_codec = CODEC_IDX_AUDIO; ci.stop_codec = false; @@ -2448,7 +2514,7 @@ static void codec_thread(void) break ; case Q_CODEC_LOAD: - logf("Codec load ram"); + LOGFQUEUE("codec < Q_CODEC_LOAD"); if (!cur_ti->has_codec) { logf("Codec slot is empty!"); /* Wait for the pcm buffer to go empty */ @@ -2456,13 +2522,17 @@ static void codec_thread(void) yield(); /* This must be set to prevent an infinite loop */ ci.stop_codec = true; + LOGFQUEUE("codec > codec Q_AUDIO_PLAY"); queue_post(&codec_queue, Q_AUDIO_PLAY, 0); break ; } audio_codec_loaded = true; if (voice_codec_loaded) + { + LOGFQUEUE("codec > voice Q_AUDIO_PLAY"); queue_post(&voice_codec_queue, Q_AUDIO_PLAY, 0); + } mutex_lock(&mutex_codecthread); current_codec = CODEC_IDX_AUDIO; ci.stop_codec = false; @@ -2474,10 +2544,13 @@ static void codec_thread(void) #if defined(HAVE_RECORDING) && !defined(SIMULATOR) case Q_ENCODER_LOAD_DISK: - logf("Encoder load disk"); + LOGFQUEUE("codec < Q_ENCODER_LOAD_DISK"); audio_codec_loaded = false; if (voice_codec_loaded && current_codec == CODEC_IDX_VOICE) + { + LOGFQUEUE("codec > voice Q_ENCODER_RECORD"); queue_post(&voice_codec_queue, Q_ENCODER_RECORD, NULL); + } mutex_lock(&mutex_codecthread); current_codec = CODEC_IDX_AUDIO; ci.stop_codec = false; @@ -2488,14 +2561,17 @@ static void codec_thread(void) #ifndef SIMULATOR case SYS_USB_CONNECTED: + LOGFQUEUE("codec < SYS_USB_CONNECTED"); queue_clear(&codec_queue); - logf("USB: Audio codec"); usb_acknowledge(SYS_USB_CONNECTED_ACK); if (voice_codec_loaded) swap_codec(); usb_wait_for_disconnect(&codec_queue); - break ; + break; #endif + + default: + LOGFQUEUE("codec < default"); } if (audio_codec_loaded) @@ -2512,6 +2588,7 @@ static void codec_thread(void) switch (ev.id) { case Q_CODEC_LOAD_DISK: case Q_CODEC_LOAD: + LOGFQUEUE("codec < Q_CODEC_LOAD"); if (playing) { if (ci.new_track || status != CODEC_OK) @@ -2522,9 +2599,10 @@ static void codec_thread(void) gui_syncsplash(HZ*2, true, "Codec failure"); } - if (!load_next_track()) + if (!codec_load_next_track()) { // queue_post(&codec_queue, Q_AUDIO_STOP, 0); + LOGFQUEUE("codec > audio Q_AUDIO_STOP"); queue_post(&audio_queue, Q_AUDIO_STOP, 0); break; } @@ -2538,25 +2616,35 @@ static void codec_thread(void) * triggering the WPS exit */ while(pcm_is_playing()) sleep(1); + LOGFQUEUE("codec > audio Q_AUDIO_STOP"); queue_post(&audio_queue, Q_AUDIO_STOP, 0); break; } } if (cur_ti->has_codec) + { + LOGFQUEUE("codec > codec Q_CODEC_LOAD"); queue_post(&codec_queue, Q_CODEC_LOAD, 0); + } else { const char *codec_fn = get_codec_filename(cur_ti->id3.codectype); + LOGFQUEUE("codec > codec Q_CODEC_LOAD_DISK"); queue_post(&codec_queue, Q_CODEC_LOAD_DISK, (void *)codec_fn); } } + break; + + default: + LOGFQUEUE("codec < default"); + } /* end switch */ } } -static void reset_buffer(void) +static void audio_reset_buffer(void) { size_t offset; @@ -2607,6 +2695,7 @@ void audio_load_encoder(int enc_id) audio_remove_encoder(); + LOGFQUEUE("audio > codec Q_ENCODER_LOAD_DISK"); queue_post(&codec_queue, Q_ENCODER_LOAD_DISK, (void *)enc_fn); while (!ci.enc_codec_loaded) @@ -2757,19 +2846,24 @@ void audio_play(long offset) { logf("audio_play"); if (playing && offset <= 0) + { + LOGFQUEUE("audio > audio Q_AUDIO_NEW_PLAYLIST"); queue_post(&audio_queue, Q_AUDIO_NEW_PLAYLIST, 0); + } else { if (playing) audio_stop(); playing = true; + LOGFQUEUE("audio > audio Q_AUDIO_PLAY"); queue_post(&audio_queue, Q_AUDIO_PLAY, (void *)offset); } } void audio_stop(void) { + LOGFQUEUE("audio > audio Q_AUDIO_STOP"); queue_post(&audio_queue, Q_AUDIO_STOP, 0); while (playing || audio_codec_loaded) yield(); @@ -2782,11 +2876,13 @@ bool mp3_pause_done(void) void audio_pause(void) { + LOGFQUEUE("audio > audio Q_AUDIO_PAUSE"); queue_post(&audio_queue, Q_AUDIO_PAUSE, (void *)true); } void audio_resume(void) { + LOGFQUEUE("audio > audio Q_AUDIO_PAUSE resume"); queue_post(&audio_queue, Q_AUDIO_PAUSE, (void *)false); } @@ -2797,7 +2893,7 @@ void audio_next(void) /* Should be safe to do outside of thread, that way we get * the instant wps response at least. */ - initiate_track_change(1); + audio_initiate_track_change(1); // queue_post(&audio_queue, Q_AUDIO_SKIP, (void *)1); } @@ -2806,32 +2902,37 @@ void audio_prev(void) if (global_settings.beep) pcmbuf_beep(5000, 100, 2500*global_settings.beep); - initiate_track_change(-1); + audio_initiate_track_change(-1); // queue_post(&audio_queue, Q_AUDIO_SKIP, (void *)-1); } void audio_next_dir(void) { + LOGFQUEUE("audio > audio Q_AUDIO_DIR_SKIP 1"); queue_post(&audio_queue, Q_AUDIO_DIR_SKIP, (void *)1); } void audio_prev_dir(void) { + LOGFQUEUE("audio > audio Q_AUDIO_DIR_SKIP -1"); queue_post(&audio_queue, Q_AUDIO_DIR_SKIP, (void *)-1); } void audio_pre_ff_rewind(void) { + LOGFQUEUE("audio > audio Q_AUDIO_PRE_FF_REWIND"); queue_post(&audio_queue, Q_AUDIO_PRE_FF_REWIND, 0); } void audio_ff_rewind(long newpos) { + LOGFQUEUE("audio > audio Q_AUDIO_FF_REWIND"); queue_post(&audio_queue, Q_AUDIO_FF_REWIND, (int *)newpos); } void audio_flush_and_reload_tracks(void) { + LOGFQUEUE("audio > audio Q_AUDIO_FLUSH"); queue_post(&audio_queue, Q_AUDIO_FLUSH, 0); } @@ -2982,7 +3083,9 @@ void mp3_play_data(const unsigned char* start, int size, voice_clip.callback = get_more; voice_clip.buf = (char *)start; voice_clip.size = size; + logf("mp3 > voice Q_VOICE_STOP"); queue_post(&voice_codec_queue, Q_VOICE_STOP, 0); + logf("mp3 > voice Q_VOICE_PLAY"); queue_post(&voice_codec_queue, Q_VOICE_PLAY, &voice_clip); voice_is_playing = true; voice_boost_cpu(true); @@ -2990,6 +3093,7 @@ void mp3_play_data(const unsigned char* start, int size, void mp3_play_stop(void) { + logf("mp3 > voice Q_VOICE_STOP"); queue_post(&voice_codec_queue, Q_VOICE_STOP, 0); } @@ -3035,6 +3139,7 @@ void audio_set_crossfade(int enable) /* Store the track resume position */ offset = cur_ti->id3.offset; /* Playback has to be stopped before changing the buffer size. */ + LOGFQUEUE("audio > audio Q_AUDIO_STOP"); queue_post(&audio_queue, Q_AUDIO_STOP, 0); while (audio_codec_loaded) yield(); @@ -3044,7 +3149,7 @@ void audio_set_crossfade(int enable) /* Re-initialize audio system. */ pcmbuf_init(size); pcmbuf_crossfade_enable(enable); - reset_buffer(); + audio_reset_buffer(); logf("abuf:%dB", pcmbuf_get_bufsize()); logf("fbuf:%dB", filebuflen); @@ -3053,6 +3158,7 @@ void audio_set_crossfade(int enable) /* Restart playback. */ if (was_playing) { playing = true; + LOGFQUEUE("audio > audio Q_AUDIO_PLAY"); queue_post(&audio_queue, Q_AUDIO_PLAY, (void *)offset); /* Wait for the playback to start again (and display the splash @@ -3192,8 +3298,7 @@ void audio_preinit(void) void audio_init(void) { - logf("playback system post-init"); - + LOGFQUEUE("audio > audio Q_AUDIO_POSTINIT"); queue_post(&audio_queue, Q_AUDIO_POSTINIT, 0); } -- cgit v1.2.3