summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-08-29 12:46:12 +0200
committerwm4 <wm4@nowhere>2016-08-29 12:46:12 +0200
commit0110b738d5d37a0f7cafd522b89017436f7cfd73 (patch)
treefe5ee235a24d6e51804b3a959f535c0f19661513
parentbda614bfd81ae4660ed6356bc124e015645ff3b0 (diff)
downloadmpv-0110b738d5d37a0f7cafd522b89017436f7cfd73.tar.bz2
mpv-0110b738d5d37a0f7cafd522b89017436f7cfd73.tar.xz
vd_lavc, ad_lavc: set pkt_timebase, not time_base
These are different AVCodecContext fields. pkt_timebase is the correct one for identifying the unit of packet/frame timestamps when decoding, while time_base is for encoding. Some decoders also overwrite the time_base field with some unrelated codec metadata. pkt_timebase does not exist in Libav, so an #if is required.
-rw-r--r--audio/decode/ad_lavc.c5
-rw-r--r--video/decode/vd_lavc.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/audio/decode/ad_lavc.c b/audio/decode/ad_lavc.c
index 78d0cec807..e5c426e912 100644
--- a/audio/decode/ad_lavc.c
+++ b/audio/decode/ad_lavc.c
@@ -103,7 +103,10 @@ static int init(struct dec_audio *da, const char *decoder)
lavc_context->refcounted_frames = 1;
lavc_context->codec_type = AVMEDIA_TYPE_AUDIO;
lavc_context->codec_id = lavc_codec->id;
- lavc_context->time_base = ctx->codec_timebase;
+
+#if LIBAVCODEC_VERSION_MICRO >= 100
+ lavc_context->pkt_timebase = ctx->codec_timebase;
+#endif
if (opts->downmix && mpopts->audio_output_channels.num_chmaps == 1) {
lavc_context->request_channel_layout =
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 8cc5d4eca4..18cbeda4e9 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -460,7 +460,10 @@ static void init_avctx(struct dec_video *vd, const char *decoder,
avctx->opaque = vd;
avctx->codec_type = AVMEDIA_TYPE_VIDEO;
avctx->codec_id = lavc_codec->id;
- avctx->time_base = ctx->codec_timebase;
+
+#if LIBAVCODEC_VERSION_MICRO >= 100
+ avctx->pkt_timebase = ctx->codec_timebase;
+#endif
avctx->refcounted_frames = 1;
ctx->pic = av_frame_alloc();