player_thread: handle SEEK while not playing
This commit is contained in:
parent
f67136df19
commit
37f026a0a6
3
NEWS
3
NEWS
|
@ -10,6 +10,9 @@ ver 0.16.5 (2010/??/??)
|
||||||
- ffmpeg: higher precision timestamps
|
- ffmpeg: higher precision timestamps
|
||||||
- ffmpeg: don't require key frame for seeking
|
- ffmpeg: don't require key frame for seeking
|
||||||
- fix CUE track seeking
|
- fix CUE track seeking
|
||||||
|
* player:
|
||||||
|
- make seeking to CUE track more reliable
|
||||||
|
- the "seek" command works when MPD is stopped
|
||||||
* WIN32: close sockets properly
|
* WIN32: close sockets properly
|
||||||
* install systemd service file if systemd is available
|
* install systemd service file if systemd is available
|
||||||
|
|
||||||
|
|
|
@ -145,8 +145,12 @@ player_dc_start(struct player *player, struct music_pipe *pipe)
|
||||||
assert(player->queued || pc.command == PLAYER_COMMAND_SEEK);
|
assert(player->queued || pc.command == PLAYER_COMMAND_SEEK);
|
||||||
assert(pc.next_song != NULL);
|
assert(pc.next_song != NULL);
|
||||||
|
|
||||||
|
unsigned start_ms = pc.next_song->start_ms;
|
||||||
|
if (pc.command == PLAYER_COMMAND_SEEK)
|
||||||
|
start_ms += (unsigned)(pc.seek_where * 1000);
|
||||||
|
|
||||||
dc_start(dc, pc.next_song,
|
dc_start(dc, pc.next_song,
|
||||||
pc.next_song->start_ms, pc.next_song->end_ms,
|
start_ms, pc.next_song->end_ms,
|
||||||
player_buffer, pipe);
|
player_buffer, pipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -835,6 +839,10 @@ static void do_play(struct decoder_control *dc)
|
||||||
}
|
}
|
||||||
|
|
||||||
player_lock();
|
player_lock();
|
||||||
|
|
||||||
|
if (pc.command == PLAYER_COMMAND_SEEK)
|
||||||
|
player.elapsed_time = pc.seek_where;
|
||||||
|
|
||||||
pc.state = PLAYER_STATE_PLAY;
|
pc.state = PLAYER_STATE_PLAY;
|
||||||
player_command_finished_locked();
|
player_command_finished_locked();
|
||||||
|
|
||||||
|
@ -1013,6 +1021,7 @@ static gpointer player_task(G_GNUC_UNUSED gpointer arg)
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
switch (pc.command) {
|
switch (pc.command) {
|
||||||
|
case PLAYER_COMMAND_SEEK:
|
||||||
case PLAYER_COMMAND_QUEUE:
|
case PLAYER_COMMAND_QUEUE:
|
||||||
assert(pc.next_song != NULL);
|
assert(pc.next_song != NULL);
|
||||||
|
|
||||||
|
@ -1026,7 +1035,6 @@ static gpointer player_task(G_GNUC_UNUSED gpointer arg)
|
||||||
|
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case PLAYER_COMMAND_SEEK:
|
|
||||||
case PLAYER_COMMAND_PAUSE:
|
case PLAYER_COMMAND_PAUSE:
|
||||||
pc.next_song = NULL;
|
pc.next_song = NULL;
|
||||||
player_command_finished_locked();
|
player_command_finished_locked();
|
||||||
|
|
Loading…
Reference in New Issue