decoder/ffmpeg: require FFmpeg 3.1 or later
Drop some compatibility code.
This commit is contained in:
parent
b14a5141a6
commit
08272cdee2
2
NEWS
2
NEWS
@ -1,4 +1,6 @@
|
|||||||
ver 0.21.2 (not yet released)
|
ver 0.21.2 (not yet released)
|
||||||
|
* decoder
|
||||||
|
- ffmpeg: require FFmpeg 3.1 or later
|
||||||
|
|
||||||
ver 0.21.1 (2018/11/04)
|
ver 0.21.1 (2018/11/04)
|
||||||
* protocol
|
* protocol
|
||||||
|
@ -105,15 +105,6 @@ ffmpeg_finish() noexcept
|
|||||||
av_dict_free(&avformat_options);
|
av_dict_free(&avformat_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 25, 0) /* FFmpeg 3.1 */
|
|
||||||
|
|
||||||
gcc_pure
|
|
||||||
static const AVCodecParameters &
|
|
||||||
GetCodecParameters(const AVStream &stream) noexcept
|
|
||||||
{
|
|
||||||
return *stream.codecpar;
|
|
||||||
}
|
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
static AVSampleFormat
|
static AVSampleFormat
|
||||||
GetSampleFormat(const AVCodecParameters &codec_params) noexcept
|
GetSampleFormat(const AVCodecParameters &codec_params) noexcept
|
||||||
@ -121,29 +112,11 @@ GetSampleFormat(const AVCodecParameters &codec_params) noexcept
|
|||||||
return AVSampleFormat(codec_params.format);
|
return AVSampleFormat(codec_params.format);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
gcc_pure
|
|
||||||
static const AVCodecContext &
|
|
||||||
GetCodecParameters(const AVStream &stream) noexcept
|
|
||||||
{
|
|
||||||
return *stream.codec;
|
|
||||||
}
|
|
||||||
|
|
||||||
gcc_pure
|
|
||||||
static AVSampleFormat
|
|
||||||
GetSampleFormat(const AVCodecContext &codec_context) noexcept
|
|
||||||
{
|
|
||||||
return codec_context.sample_fmt;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
static bool
|
static bool
|
||||||
IsAudio(const AVStream &stream) noexcept
|
IsAudio(const AVStream &stream) noexcept
|
||||||
{
|
{
|
||||||
return GetCodecParameters(stream).codec_type == AVMEDIA_TYPE_AUDIO;
|
return stream.codecpar->codec_type == AVMEDIA_TYPE_AUDIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
gcc_pure
|
gcc_pure
|
||||||
@ -278,8 +251,6 @@ FfmpegSendFrame(DecoderClient &client, InputStream &is,
|
|||||||
codec_context.bit_rate / 1000);
|
codec_context.bit_rate / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 37, 0)
|
|
||||||
|
|
||||||
static DecoderCommand
|
static DecoderCommand
|
||||||
FfmpegReceiveFrames(DecoderClient &client, InputStream &is,
|
FfmpegReceiveFrames(DecoderClient &client, InputStream &is,
|
||||||
AVCodecContext &codec_context,
|
AVCodecContext &codec_context,
|
||||||
@ -324,8 +295,6 @@ FfmpegReceiveFrames(DecoderClient &client, InputStream &is,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode an #AVPacket and send the resulting PCM data to the decoder
|
* Decode an #AVPacket and send the resulting PCM data to the decoder
|
||||||
* API.
|
* API.
|
||||||
@ -357,7 +326,6 @@ ffmpeg_send_packet(DecoderClient &client, InputStream &is,
|
|||||||
stream.time_base));
|
stream.time_base));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 37, 0)
|
|
||||||
bool eof = false;
|
bool eof = false;
|
||||||
|
|
||||||
int err = avcodec_send_packet(&codec_context, &packet);
|
int err = avcodec_send_packet(&codec_context, &packet);
|
||||||
@ -386,30 +354,6 @@ ffmpeg_send_packet(DecoderClient &client, InputStream &is,
|
|||||||
|
|
||||||
if (eof)
|
if (eof)
|
||||||
cmd = DecoderCommand::STOP;
|
cmd = DecoderCommand::STOP;
|
||||||
#else
|
|
||||||
DecoderCommand cmd = DecoderCommand::NONE;
|
|
||||||
while (packet.size > 0 && cmd == DecoderCommand::NONE) {
|
|
||||||
int got_frame = 0;
|
|
||||||
int len = avcodec_decode_audio4(&codec_context,
|
|
||||||
&frame, &got_frame,
|
|
||||||
&packet);
|
|
||||||
if (len < 0) {
|
|
||||||
/* if error, we skip the frame */
|
|
||||||
LogFfmpegError(len, "decoding failed, frame skipped");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
packet.data += len;
|
|
||||||
packet.size -= len;
|
|
||||||
|
|
||||||
if (!got_frame || frame.nb_samples <= 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
cmd = FfmpegSendFrame(client, is, codec_context,
|
|
||||||
frame, skip_bytes,
|
|
||||||
buffer);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
@ -585,11 +529,7 @@ FfmpegDecode(DecoderClient &client, InputStream &input,
|
|||||||
|
|
||||||
AVStream &av_stream = *format_context.streams[audio_stream];
|
AVStream &av_stream = *format_context.streams[audio_stream];
|
||||||
|
|
||||||
#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(57, 5, 0)
|
const auto &codec_params = *av_stream.codecpar;
|
||||||
AVCodecContext *codec_context = av_stream.codec;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const auto &codec_params = GetCodecParameters(av_stream);
|
|
||||||
|
|
||||||
const AVCodecDescriptor *codec_descriptor =
|
const AVCodecDescriptor *codec_descriptor =
|
||||||
avcodec_descriptor_get(codec_params.codec_id);
|
avcodec_descriptor_get(codec_params.codec_id);
|
||||||
@ -604,7 +544,6 @@ FfmpegDecode(DecoderClient &client, InputStream &input,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(57, 5, 0)
|
|
||||||
AVCodecContext *codec_context = avcodec_alloc_context3(codec);
|
AVCodecContext *codec_context = avcodec_alloc_context3(codec);
|
||||||
if (codec_context == nullptr) {
|
if (codec_context == nullptr) {
|
||||||
LogError(ffmpeg_domain, "avcodec_alloc_context3() failed");
|
LogError(ffmpeg_domain, "avcodec_alloc_context3() failed");
|
||||||
@ -615,10 +554,7 @@ FfmpegDecode(DecoderClient &client, InputStream &input,
|
|||||||
avcodec_free_context(&codec_context);
|
avcodec_free_context(&codec_context);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 25, 0) /* FFmpeg 3.1 */
|
|
||||||
avcodec_parameters_to_context(codec_context, av_stream.codecpar);
|
avcodec_parameters_to_context(codec_context, av_stream.codecpar);
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const SampleFormat sample_format =
|
const SampleFormat sample_format =
|
||||||
ffmpeg_sample_format(GetSampleFormat(codec_params));
|
ffmpeg_sample_format(GetSampleFormat(codec_params));
|
||||||
@ -642,12 +578,6 @@ FfmpegDecode(DecoderClient &client, InputStream &input,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(57, 5, 0)
|
|
||||||
AtScopeExit(codec_context) {
|
|
||||||
avcodec_close(codec_context);
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const SignedSongTime total_time =
|
const SignedSongTime total_time =
|
||||||
av_stream.duration != (int64_t)AV_NOPTS_VALUE
|
av_stream.duration != (int64_t)AV_NOPTS_VALUE
|
||||||
? FromFfmpegTimeChecked(av_stream.duration, av_stream.time_base)
|
? FromFfmpegTimeChecked(av_stream.duration, av_stream.time_base)
|
||||||
@ -711,11 +641,7 @@ FfmpegDecode(DecoderClient &client, InputStream &input,
|
|||||||
} else
|
} else
|
||||||
cmd = client.GetCommand();
|
cmd = client.GetCommand();
|
||||||
|
|
||||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56, 25, 100)
|
|
||||||
av_packet_unref(&packet);
|
av_packet_unref(&packet);
|
||||||
#else
|
|
||||||
av_free_packet(&packet);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -769,7 +695,7 @@ FfmpegScanStream(AVFormatContext &format_context,
|
|||||||
handler.OnDuration(FromFfmpegTime(format_context.duration,
|
handler.OnDuration(FromFfmpegTime(format_context.duration,
|
||||||
AV_TIME_BASE_Q));
|
AV_TIME_BASE_Q));
|
||||||
|
|
||||||
const auto &codec_params = GetCodecParameters(stream);
|
const auto &codec_params = *stream.codecpar;
|
||||||
try {
|
try {
|
||||||
handler.OnAudioFormat(CheckAudioFormat(codec_params.sample_rate,
|
handler.OnAudioFormat(CheckAudioFormat(codec_params.sample_rate,
|
||||||
ffmpeg_sample_format(GetSampleFormat(codec_params)),
|
ffmpeg_sample_format(GetSampleFormat(codec_params)),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
libavformat_dep = dependency('libavformat', version: '>= 56.1', required: get_option('ffmpeg'))
|
libavformat_dep = dependency('libavformat', version: '>= 57.40', required: get_option('ffmpeg'))
|
||||||
libavcodec_dep = dependency('libavcodec', version: '>= 56.1', required: get_option('ffmpeg'))
|
libavcodec_dep = dependency('libavcodec', version: '>= 57.48', required: get_option('ffmpeg'))
|
||||||
libavutil_dep = dependency('libavutil', version: '>= 54.3', required: get_option('ffmpeg'))
|
libavutil_dep = dependency('libavutil', version: '>= 55.27', required: get_option('ffmpeg'))
|
||||||
|
|
||||||
enable_ffmpeg = libavformat_dep.found() and libavcodec_dep.found() and libavutil_dep.found()
|
enable_ffmpeg = libavformat_dep.found() and libavcodec_dep.found() and libavutil_dep.found()
|
||||||
conf.set('ENABLE_FFMPEG', enable_ffmpeg)
|
conf.set('ENABLE_FFMPEG', enable_ffmpeg)
|
||||||
|
Loading…
Reference in New Issue
Block a user