summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/out/ao_lavc.c7
-rw-r--r--player/audio.c2
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;