player: chop the tail of the music pipe after CANCEL
When a CANCEL command is received, the player should drop all chunks of the next song. Added new funciton music_pipe_chop() which is used for that.
This commit is contained in:
parent
66ce1495f0
commit
709640422c
12
src/pipe.c
12
src/pipe.c
@ -301,6 +301,18 @@ void music_pipe_skip(unsigned num)
|
|||||||
music_pipe_shift();
|
music_pipe_shift();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void music_pipe_chop(unsigned first)
|
||||||
|
{
|
||||||
|
for (unsigned i = first; i != music_pipe.end; i = successor(i))
|
||||||
|
music_chunk_free(&music_pipe.chunks[i]);
|
||||||
|
|
||||||
|
music_chunk_free(&music_pipe.chunks[music_pipe.end]);
|
||||||
|
|
||||||
|
music_pipe.end = first;
|
||||||
|
music_chunk_init(&music_pipe.chunks[first]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
void music_pipe_check_format(const struct audio_format *current,
|
void music_pipe_check_format(const struct audio_format *current,
|
||||||
int next_index, const struct audio_format *next)
|
int next_index, const struct audio_format *next)
|
||||||
|
@ -164,6 +164,12 @@ bool music_pipe_tag(const struct tag *tag);
|
|||||||
|
|
||||||
void music_pipe_skip(unsigned num);
|
void music_pipe_skip(unsigned num);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chop off the tail of the music pipe, starting with the chunk at
|
||||||
|
* index "first".
|
||||||
|
*/
|
||||||
|
void music_pipe_chop(unsigned first);
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
void music_pipe_check_format(const struct audio_format *current,
|
void music_pipe_check_format(const struct audio_format *current,
|
||||||
int next_index, const struct audio_format *next);
|
int next_index, const struct audio_format *next);
|
||||||
|
@ -203,6 +203,7 @@ static void player_process_command(struct player *player)
|
|||||||
/* the decoder is already decoding the song -
|
/* the decoder is already decoding the song -
|
||||||
stop it and reset the position */
|
stop it and reset the position */
|
||||||
dc_stop(&pc.notify);
|
dc_stop(&pc.notify);
|
||||||
|
music_pipe_chop(player->next_song_chunk);
|
||||||
player->next_song_chunk = -1;
|
player->next_song_chunk = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user