From 05e4df3f0c7679e8ac3b32a1a414be751b6b6b37 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 19 Aug 2016 14:19:46 +0200 Subject: video/audio: always provide "proper" timestamps to libavcodec Instead of passing through double float timestamps opaquely, pass real timestamps. Do so by always setting a valid timebase on the AVCodecContext for audio and video decoding. Specifically try not to round timestamps to a too coarse timebase, which could round off small adjustments to timestamps (such as for start time rebasing or demux_timeline). If the timebase is considered too coarse, make it finer. This gets rid of the need to do this specifically for some hardware decoding wrapper. The old method of passing through double timestamps was also a bit questionable. While libavcodec is not supposed to interpret timestamps at all if no timebase is provided, it was needlessly tricky. Also, it actually does compare them with AV_NOPTS_VALUE. This change will probably also reduce confusion in the future. --- video/decode/vd_lavc.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'video/decode') diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index eb63e58e92..804bf1112d 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -449,10 +449,7 @@ static void init_avctx(struct dec_video *vd, const char *decoder, if (!lavc_codec) return; - ctx->codec_timebase = (AVRational){0}; - if (strstr(decoder, "_mmal") || strstr(decoder, "_mediacodec")) - ctx->codec_timebase = (AVRational){1, 1000000}; - + ctx->codec_timebase = mp_get_codec_timebase(vd->codec); ctx->pix_fmt = AV_PIX_FMT_NONE; ctx->hwdec = hwdec; ctx->hwdec_fmt = 0; -- cgit v1.2.3