audio: don't write audio when paused

This is probably "safer". Without it, we will play 1 sample, because the
logic was written in a way to decode 1 sample if audio is paused. 1
sample usually will initialize the audio PTS, but not play any real
audio. Also see previous commit.

In ancient times, this actually used 1 byte (instead of 1 sample), so
clearly no sample was written, unless the audio was 8-bit mono.
This commit is contained in:
wm4 2014-03-09 01:26:24 +01:00
parent 7b6e211e63
commit 3da0a3ccc3
1 changed files with 5 additions and 0 deletions

View File

@ -264,6 +264,8 @@ static int write_to_ao(struct MPContext *mpctx, struct mp_audio *data, int flags
#if HAVE_ENCODING
encode_lavc_set_audio_pts(mpctx->encode_lavc_ctx, mpctx->ao_pts);
#endif
if (data->samples == 0)
return 0;
double real_samplerate = out_format.rate / mpctx->opts->playback_speed;
int played = ao_play(mpctx->ao, data->planes, data->samples, flags);
assert(played <= data->samples);
@ -456,6 +458,9 @@ int fill_audio_out_buffers(struct MPContext *mpctx, double endpts)
}
}
if (mpctx->paused)
playsize = 0;
struct mp_audio data;
mp_audio_buffer_peek(mpctx->ao_buffer, &data);
data.samples = MPMIN(data.samples, playsize);