path: root/common
diff options
authorwm4 <wm4@nowhere>2014-03-07 15:23:03 +0100
committerwm4 <wm4@nowhere>2014-03-07 15:23:03 +0100
commit74b7001500c0901b095986fafe7dca3e5c23c7f2 (patch)
treedaee66eb3955ff8bff726b916171a81a4bf0e451 /common
parent4579d9ca58ee50dba6cb45e4f27e85f2ebbb8269 (diff)
encode: don't access ao->pts
This field will be moved out of the ao struct. The encoding code was basically using an invalid way of accessing this field. Since the AO will be moved into its own thread too and will do its own buffering, the AO and the playback core might not even agree which sample a PTS timestamp belongs to. Add some extrapolation code to handle this case.
Diffstat (limited to 'common')
3 files changed, 12 insertions, 0 deletions
diff --git a/common/encode.h b/common/encode.h
index a4c7d821d9..7d6cacd86a 100644
--- a/common/encode.h
+++ b/common/encode.h
@@ -18,6 +18,7 @@ bool encode_lavc_showhelp(struct mp_log *log, struct encode_output_conf *options
int encode_lavc_getstatus(struct encode_lavc_context *ctx, char *buf, int bufsize, float relative_position);
void encode_lavc_expect_stream(struct encode_lavc_context *ctx, int mt);
void encode_lavc_set_video_fps(struct encode_lavc_context *ctx, float fps);
+void encode_lavc_set_audio_pts(struct encode_lavc_context *ctx, double pts);
bool encode_lavc_didfail(struct encode_lavc_context *ctx); // check if encoding failed
diff --git a/common/encode_lavc.c b/common/encode_lavc.c
index 39787430bf..5f9e2a0390 100644
--- a/common/encode_lavc.c
+++ b/common/encode_lavc.c
@@ -386,6 +386,14 @@ void encode_lavc_set_video_fps(struct encode_lavc_context *ctx, float fps)
ctx->vo_fps = fps;
+void encode_lavc_set_audio_pts(struct encode_lavc_context *ctx, double pts)
+ if (ctx) {
+ ctx->last_audio_in_pts = pts;
+ ctx->samples_since_last_pts = 0;
+ }
static void encode_2pass_prepare(struct encode_lavc_context *ctx,
AVDictionary **dictp,
AVStream *stream, struct stream **bytebuf,
diff --git a/common/encode_lavc.h b/common/encode_lavc.h
index 96fc17f1bb..deaf42b684 100644
--- a/common/encode_lavc.h
+++ b/common/encode_lavc.h
@@ -55,6 +55,9 @@ struct encode_lavc_context {
double audio_pts_offset;
double last_video_in_pts;
+ double last_audio_in_pts;
+ int64_t samples_since_last_pts;
// anti discontinuity mode
double next_in_pts;
double discontinuity_pts_offset;