summaryrefslogtreecommitdiffstats
path: root/demux/demux_lavf.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-03-31 22:00:45 +0200
committerwm4 <wm4@nowhere>2016-03-31 22:00:45 +0200
commitc971220cdd360b56efc0e67536bdf19501477aa4 (patch)
tree74ffd570b80306725898d81e705e09b3a4dfdb8d /demux/demux_lavf.c
parent38c813c919a2c7d59d6113f16252aa3be96f3fca (diff)
downloadmpv-c971220cdd360b56efc0e67536bdf19501477aa4.tar.bz2
mpv-c971220cdd360b56efc0e67536bdf19501477aa4.tar.xz
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.
Diffstat (limited to 'demux/demux_lavf.c')
-rw-r--r--demux/demux_lavf.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 1c5d0fc05a..e4ad5881ca 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -550,8 +550,14 @@ static void handle_new_stream(demuxer_t *demuxer, int i)
lavf_priv_t *priv = demuxer->priv;
AVFormatContext *avfc = priv->avfc;
AVStream *st = avfc->streams[i];
- AVCodecContext *codec = st->codec;
struct sh_stream *sh = NULL;
+#if HAVE_AVCODEC_HAS_CODECPAR
+ AVCodecParameters *codec = st->codecpar;
+ int lavc_delay = codec->initial_padding;
+#else
+ AVCodecContext *codec = st->codec;
+ int lavc_delay = codec->delay;
+#endif
switch (codec->codec_type) {
case AVMEDIA_TYPE_AUDIO: {
@@ -566,7 +572,7 @@ static void handle_new_stream(demuxer_t *demuxer, int i)
double delay = 0;
if (codec->sample_rate > 0)
- delay = codec->delay / (double)codec->sample_rate;
+ delay = lavc_delay / (double)codec->sample_rate;
priv->seek_delay = MPMAX(priv->seek_delay, delay);
export_replaygain(demuxer, sh->codec, st);
@@ -647,9 +653,17 @@ static void handle_new_stream(demuxer_t *demuxer, int i)
sh->ff_index = st->index;
sh->codec->codec = mp_codec_from_av_codec_id(codec->codec_id);
sh->codec->codec_tag = codec->codec_tag;
+#if HAVE_AVCODEC_HAS_CODECPAR
+ sh->codec->lav_codecpar = avcodec_parameters_alloc();
+ if (sh->codec->lav_codecpar)
+ avcodec_parameters_copy(sh->codec->lav_codecpar, codec);
+#else
+ sh->codec->codec = mp_codec_from_av_codec_id(codec->codec_id);
+ sh->codec->codec_tag = codec->codec_tag;
sh->codec->lav_headers = avcodec_alloc_context3(NULL);
if (sh->codec->lav_headers)
mp_copy_lav_codec_headers(sh->codec->lav_headers, codec);
+#endif
if (st->disposition & AV_DISPOSITION_DEFAULT)
sh->default_track = true;