summaryrefslogtreecommitdiffstats
path: root/demux
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
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')
-rw-r--r--demux/demux_lavf.c18
-rw-r--r--demux/stheader.h2
2 files changed, 18 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;
diff --git a/demux/stheader.h b/demux/stheader.h
index 35be20885a..77d0eb1da3 100644
--- a/demux/stheader.h
+++ b/demux/stheader.h
@@ -68,7 +68,9 @@ struct mp_codec_params {
int extradata_size;
// Codec specific header data (set by demux_lavf.c only)
+ // Which one is in use depends on HAVE_AVCODEC_HAS_CODECPAR.
struct AVCodecContext *lav_headers;
+ struct AVCodecParameters *lav_codecpar;
// STREAM_AUDIO
int samplerate;