diff options
Diffstat (limited to 'audio/decode/dec_audio.c')
-rw-r--r-- | audio/decode/dec_audio.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c index b004664474..6f07b4729d 100644 --- a/audio/decode/dec_audio.c +++ b/audio/decode/dec_audio.c @@ -275,10 +275,14 @@ static int filter_n_bytes(struct dec_audio *da, struct mp_audio_buffer *outbuf, filter_data.rate = da->afilter->input.rate; // due to playback speed change len = MPMIN(filter_data.samples, len); filter_data.samples = len; + bool eof = filter_data.samples == 0 && error < 0; - if (af_filter(da->afilter, &filter_data, 0) < 0) + if (af_filter(da->afilter, &filter_data, eof ? AF_FILTER_FLAG_EOF : 0) < 0) return -1; + mp_audio_buffer_append(outbuf, &filter_data); + if (eof && filter_data.samples > 0) + error = 0; // don't end playback yet // remove processed data from decoder buffer: mp_audio_buffer_skip(da->decode_buffer, len); |