diff options
author | wm4 <wm4@nowhere> | 2016-03-31 22:00:45 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-03-31 22:00:45 +0200 |
commit | c971220cdd360b56efc0e67536bdf19501477aa4 (patch) | |
tree | 74ffd570b80306725898d81e705e09b3a4dfdb8d /demux | |
parent | 38c813c919a2c7d59d6113f16252aa3be96f3fca (diff) | |
download | mpv-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.c | 18 | ||||
-rw-r--r-- | demux/stheader.h | 2 |
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; |