From c971220cdd360b56efc0e67536bdf19501477aa4 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 31 Mar 2016 22:00:45 +0200 Subject: demux_lavf, ad_lavc, ad_spdif, vd_lavc: handle FFmpeg codecpar API change AVFormatContext.codec is deprecated now, and you're supposed to use AVFormatContext.codecpar instead. Handle this for all of the normal playback code. Encoding mode isn't touched. --- common/av_common.c | 16 ++++++++++++++++ common/av_common.h | 2 ++ 2 files changed, 18 insertions(+) (limited to 'common') diff --git a/common/av_common.c b/common/av_common.c index 6efa1803fd..e40c751e9f 100644 --- a/common/av_common.c +++ b/common/av_common.c @@ -25,9 +25,12 @@ #include #include +#include "config.h" + #include "common/common.h" #include "common/msg.h" #include "demux/packet.h" +#include "demux/stheader.h" #include "av_common.h" #include "codecs.h" @@ -68,6 +71,19 @@ void mp_copy_lav_codec_headers(AVCodecContext *avctx, AVCodecContext *st) avctx->has_b_frames = st->has_b_frames; } +// This only copies ffmpeg-native codec parameters. Parameters produced by +// other demuxers must be handled manually. +void mp_set_lav_codec_headers(AVCodecContext *avctx, struct mp_codec_params *c) +{ +#if HAVE_AVCODEC_HAS_CODECPAR + if (c->lav_codecpar) + avcodec_parameters_to_context(avctx, c->lav_codecpar); +#else + if (c->lav_headers) + mp_copy_lav_codec_headers(avctx, c->lav_headers); +#endif +} + // We merely pass-through our PTS/DTS as an int64_t; libavcodec won't use it. union pts { int64_t i; double d; }; diff --git a/common/av_common.h b/common/av_common.h index 1478adf8fb..e2b86bfe40 100644 --- a/common/av_common.h +++ b/common/av_common.h @@ -26,11 +26,13 @@ struct mp_decoder_list; struct demux_packet; +struct mp_codec_params; struct AVDictionary; struct mp_log; int mp_lavc_set_extradata(AVCodecContext *avctx, void *ptr, int size); void mp_copy_lav_codec_headers(AVCodecContext *avctx, AVCodecContext *st); +void mp_set_lav_codec_headers(AVCodecContext *avctx, struct mp_codec_params *c); void mp_set_av_packet(AVPacket *dst, struct demux_packet *mpkt, AVRational *tb); int64_t mp_pts_to_av(double mp_pts, AVRational *tb); double mp_pts_from_av(int64_t av_pts, AVRational *tb); -- cgit v1.2.3