diff options
author | Alexey Yakovenko <waker@users.sourceforge.net> | 2014-07-23 20:17:45 +0200 |
---|---|---|
committer | Alexey Yakovenko <waker@users.sourceforge.net> | 2014-07-23 20:17:45 +0200 |
commit | 7c4f6865f61e3da3cad3acf9c28b7d586db7af84 (patch) | |
tree | d9cd1f177e3e5350f752b7f986ff66e5f0bda6c3 | |
parent | 19d65a54cb7bd292d4181e65578c36f2257592f6 (diff) |
fixed few streamer responsiveness issues; fixed invalid track skipping code
-rw-r--r-- | main.c | 4 | ||||
-rw-r--r-- | streamer.c | 58 | ||||
-rw-r--r-- | streamer.h | 8 |
3 files changed, 41 insertions, 29 deletions
@@ -584,7 +584,7 @@ player_mainloop (void) { streamer_move_to_nextsong (1); break; case DB_EV_PREV: - streamer_move_to_prevsong (); + streamer_move_to_prevsong (1); break; case DB_EV_PAUSE: if (output->state () != OUTPUT_STATE_PAUSED) { @@ -602,7 +602,7 @@ player_mainloop (void) { } break; case DB_EV_PLAY_RANDOM: - streamer_move_to_randomsong (); + streamer_move_to_randomsong (1); break; case DB_EV_PLAYLIST_REFRESH: pl_save_current (); @@ -189,13 +189,13 @@ static void streamer_set_nextsong_real (int song, int pstate); static int -streamer_move_to_nextsong_real (int reason); +streamer_move_to_nextsong_real (int r); static int -streamer_move_to_prevsong_real (void); +streamer_move_to_prevsong_real (int r); static int -streamer_move_to_randomsong_real (void); +streamer_move_to_randomsong_real (int r); static void streamer_play_current_track_real (void); @@ -646,7 +646,7 @@ streamer_move_to_nextsong_real (int reason) { } else if (pl_order == PLAYBACK_ORDER_RANDOM) { // random pl_unlock (); - int res = streamer_move_to_randomsong (); + int res = streamer_move_to_randomsong (1); if (res == -1) { trace ("streamer_move_to_randomsong error\n"); streamer_set_nextsong_real (-2, 1); @@ -659,8 +659,10 @@ streamer_move_to_nextsong_real (int reason) { } static int -streamer_move_to_prevsong_real (void) { - plug_get_output ()->stop (); +streamer_move_to_prevsong_real (int r) { + if (r) { + plug_get_output ()->stop (); + } pl_lock (); if (streamer_playlist) { plt_unref (streamer_playlist); @@ -760,7 +762,7 @@ streamer_move_to_prevsong_real (void) { } else if (pl_order == PLAYBACK_ORDER_RANDOM) { // random pl_unlock (); - int res = streamer_move_to_randomsong (); + int res = streamer_move_to_randomsong (1); if (res == -1) { streamer_set_nextsong_real (-2, 1); trace ("streamer_move_to_randomsong error\n"); @@ -773,8 +775,10 @@ streamer_move_to_prevsong_real (void) { } static int -streamer_move_to_randomsong_real (void) { - plug_get_output ()->stop (); +streamer_move_to_randomsong_real (int reason) { + if (reason) { + plug_get_output ()->stop (); + } if (!streamer_playlist) { streamer_playlist = plt_get_curr (); } @@ -798,18 +802,27 @@ streamer_move_to_randomsong_real (void) { } int -streamer_move_to_nextsong (int reason) { - handler_push (handler, STR_EV_NEXT, 0, reason, 0); +streamer_move_to_nextsong (int r) { + if (r) { + streamer_abort_files (); + } + handler_push (handler, STR_EV_NEXT, 0, r, 0); } int -streamer_move_to_prevsong (void) { - handler_push (handler, STR_EV_PREV, 0, 0, 0); +streamer_move_to_prevsong (int r) { + if (r) { + streamer_abort_files (); + } + handler_push (handler, STR_EV_PREV, 0, r, 0); } int -streamer_move_to_randomsong (void) { - handler_push (handler, STR_EV_RAND, 0, 0, 0); +streamer_move_to_randomsong (int r) { + if (r) { + streamer_abort_files (); + } + handler_push (handler, STR_EV_RAND, 0, r, 0); } // playlist must call that whenever item was removed @@ -961,6 +974,7 @@ streamer_set_current (playItem_t *it) { pl_item_ref (to); } trace ("\033[0;35mstreamer_set_current from %p to %p\033[37;0m\n", from, it); + trace ("\033[0;35moutput state: %d\033[37;0m\n", output->state ()); if (!playing_track || output->state () == OUTPUT_STATE_STOPPED) { streamer_buffering = 1; trace ("\033[0;35mstreamer_start_playback[1] from %p to %p\033[37;0m\n", from, it); @@ -968,9 +982,6 @@ streamer_set_current (playItem_t *it) { streamer_start_playback (from, it); bytes_until_next_song = -1; } -// else if (output->state () == OUTPUT_STATE_PLAYING) { -// assert (0); -// } trace ("streamer_set_current %p, buns=%d\n", it, bytes_until_next_song); mutex_lock (decodemutex); @@ -1450,8 +1461,8 @@ streamer_start_new_song (void) { trace ("\033[0;34mbadsong=%d\033[37;0m\n", badsong); // try jump to next song if (nextsong == -1) { - streamer_move_to_nextsong (0); - trace ("streamer_move_to_nextsong switched to track %d\n", nextsong); + trace ("streamer_move_to_nextsong after skip\n"); + streamer_move_to_nextsong (1); usleep (50000); } else { @@ -1526,6 +1537,7 @@ streamer_next (int bytesread) { } } else { + trace ("streamer_move_to_nextsong (0) called from streamer_next\n"); streamer_move_to_nextsong (0); } } @@ -1558,10 +1570,10 @@ streamer_thread (void *ctx) { streamer_move_to_nextsong_real (p1); break; case STR_EV_PREV: - streamer_move_to_prevsong_real (); + streamer_move_to_prevsong_real (p1); break; case STR_EV_RAND: - streamer_move_to_randomsong_real (); + streamer_move_to_randomsong_real (p1); break; case STR_EV_SEEK: seekpos = *((float *)&p1); @@ -1725,8 +1737,8 @@ streamer_thread (void *ctx) { send_trackinfochanged (streaming_track); } trace ("failed to restart prev track on seek, trying to jump to next track\n"); + trace ("streamer_move_to_nextsong from seek\n"); streamer_move_to_nextsong (0); - trace ("streamer_move_to_nextsong switched to track %d\n", nextsong); usleep (50000); continue; } @@ -104,15 +104,15 @@ int streamer_get_apx_bitrate (void); // returns -1 if theres no next song, or playlist finished -// reason 0 means "song finished", 1 means "user clicked next" +// reason 0 means "prev song finished", 1 means "interrupt" int -streamer_move_to_nextsong (int reason); +streamer_move_to_nextsong (int r); int -streamer_move_to_prevsong (void); +streamer_move_to_prevsong (int r); int -streamer_move_to_randomsong (void); +streamer_move_to_randomsong (int r); struct DB_fileinfo_s * streamer_get_current_fileinfo (void); |