diff options
-rw-r--r-- | audio/out/ao_lavc.c | 7 | ||||
-rw-r--r-- | player/audio.c | 2 |
2 files changed, 6 insertions, 3 deletions
diff --git a/audio/out/ao_lavc.c b/audio/out/ao_lavc.c index bdd3cdac57..72e98655c1 100644 --- a/audio/out/ao_lavc.c +++ b/audio/out/ao_lavc.c @@ -343,7 +343,6 @@ static int play(struct ao *ao, void **data, int samples, int flags) double pts = ectx->last_audio_in_pts; pts += ectx->samples_since_last_pts / (double)ao->samplerate; - ectx->samples_since_last_pts += samples; size_t num_planes = af_fmt_is_planar(ao->format) ? ao->channels.num : 1; @@ -451,6 +450,10 @@ static int play(struct ao *ao, void **data, int samples, int flags) } talloc_free(tempdata); + + int taken = FFMIN(bufpos, orig_samples); + ectx->samples_since_last_pts += taken; + pthread_mutex_unlock(&ectx->lock); if (flags & AOPLAY_FINAL_CHUNK) { @@ -463,7 +466,7 @@ static int play(struct ao *ao, void **data, int samples, int flags) } } - return FFMIN(bufpos, orig_samples); + return taken; } static void drain(struct ao *ao) diff --git a/player/audio.c b/player/audio.c index a63b847a75..d0f78b3643 100644 --- a/player/audio.c +++ b/player/audio.c @@ -264,7 +264,7 @@ static int write_to_ao(struct MPContext *mpctx, struct mp_audio *data, int flags ao_get_format(ao, &out_format); mpctx->ao_pts = pts; #if HAVE_ENCODING - encode_lavc_set_audio_pts(mpctx->encode_lavc_ctx, mpctx->ao_pts); + encode_lavc_set_audio_pts(mpctx->encode_lavc_ctx, playing_audio_pts(mpctx)); #endif if (data->samples == 0) return 0; |