Take care of libavcodec convergence_duration deprecation

This AVPacket field was a hack against the fact that the duration field
was merely an int (too small for things like subtitle durations). Newer
libavcodec drops this field and makes duration 64 bit.
This commit is contained in:
wm4 2015-09-29 18:43:28 +02:00
parent 12cd48a8a9
commit b4491c00c4
4 changed files with 17 additions and 1 deletions

View File

@ -816,6 +816,12 @@ api_statement_check \
libavutil/pixdesc.h \
'AVComponentDescriptor d; int x = d.depth'
api_statement_check \
"libavcodec 64 bit AVPacket.duration" \
HAVE_AV_AVPACKET_INT64_DURATION \
libavcodec/avcodec.h \
'int x[(int)sizeof(((AVPacket){0}).duration) - 7]'
check_pkg_config "libavfilter" $_libavfilter LIBAVFILTER 'libavfilter >= 5.0.0'
check_pkg_config "libavdevice" $_libavdevice LIBAVDEVICE 'libavdevice >= 55.0.0'

View File

@ -882,8 +882,10 @@ static int demux_lavf_fill_buffer(demuxer_t *demux)
if (pkt->dts != AV_NOPTS_VALUE)
dp->dts = pkt->dts * av_q2d(st->time_base);
dp->duration = pkt->duration * av_q2d(st->time_base);
#if !HAVE_AV_AVPACKET_INT64_DURATION
if (pkt->convergence_duration > 0)
dp->duration = pkt->convergence_duration * av_q2d(st->time_base);
#endif
dp->pos = pkt->pos;
dp->keyframe = pkt->flags & AV_PKT_FLAG_KEY;
if (dp->pts != MP_NOPTS_VALUE) {

View File

@ -202,7 +202,9 @@ static int parse_webvtt(AVPacket *in, AVPacket *pkt)
pkt->pts = in->pts;
pkt->duration = in->duration;
#if !HAVE_AV_AVPACKET_INT64_DURATION
pkt->convergence_duration = in->convergence_duration;
#endif
return 0;
}

View File

@ -458,7 +458,13 @@ FFmpeg/Libav libraries. You need at least {0}. Aborting.".format(libav_versions_
'func': check_statement('libavutil/pixdesc.h',
'AVComponentDescriptor d; int x = d.depth',
use='libav'),
}
}, {
'name': 'av-avpacket-int64-duration',
'desc': 'libavcodec 64 bit AVPacket.duration',
'func': check_statement('libavcodec/avcodec.h',
'int x[(int)sizeof(((AVPacket){0}).duration) - 7]',
use='libav'),
},
]
audio_output_features = [