diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2019-02-12 09:57:12 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2019-02-14 09:24:25 +0100 |
commit | 553a8dc6d726a19b30da8ee4a08dcfea2c444a52 (patch) | |
tree | 9a0c9798188a32f7a00bd9727d2371a57d047fb9 /src | |
parent | 24852ca110c7240dd5c57aa7201d802302a097ce (diff) | |
download | pianobar-553a8dc6d726a19b30da8ee4a08dcfea2c444a52.tar.gz pianobar-553a8dc6d726a19b30da8ee4a08dcfea2c444a52.tar.bz2 pianobar-553a8dc6d726a19b30da8ee4a08dcfea2c444a52.zip |
player: Fix buffering issue with mp3
Again, I used the wrong time_base. Since lastTimestamp and the decoder’s
frame->pts used different time_base’s, the buffer health was wrong,
resulting in an indefinite stall (“buffer is full” when it was not).
See #678.
Diffstat (limited to 'src')
-rw-r--r-- | src/player.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/player.c b/src/player.c index 92f230e..d8ff969 100644 --- a/src/player.c +++ b/src/player.c @@ -557,9 +557,13 @@ void *BarAoPlayThread (void *data) { } pthread_mutex_unlock (&player->lock); + /* lastTimestamp must be the last pts, but expressed in terms of + * st->time_base, not the sink’s time_base. */ + AVRational lastTimestampQ = av_mul_q (timestampQ, av_inv_q (player->st->time_base)); + const int64_t lastTimestamp = lastTimestampQ.num/lastTimestampQ.den; /* notify download thread, we might need more data */ pthread_mutex_lock (&player->aoplayLock); - player->lastTimestamp = filteredFrame->pts; + player->lastTimestamp = lastTimestamp; pthread_cond_broadcast (&player->aoplayCond); pthread_mutex_unlock (&player->aoplayLock); |