Commit 08272cde authored by Max Kellermann's avatar Max Kellermann

decoder/ffmpeg: require FFmpeg 3.1 or later

Drop some compatibility code.
parent b14a5141
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 ...@@ -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 ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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)),
......
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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment