Merge branch 'v0.23.x'

This commit is contained in:
Max Kellermann 2022-07-27 11:06:47 +02:00
commit 4c08c0b8b1
6 changed files with 46 additions and 16 deletions

3
NEWS
View File

@ -19,8 +19,11 @@ ver 0.24 (not yet released)
* remove Haiku support
ver 0.23.9 (not yet released)
* decoder
- ffmpeg: support FFmpeg 5.1
* output
- pipewire: set app icon
* improve iconv detection
ver 0.23.8 (2022/07/09)
* storage

View File

@ -151,8 +151,8 @@ gme = CmakeProject(
)
ffmpeg = FfmpegProject(
'http://ffmpeg.org/releases/ffmpeg-5.0.1.tar.xz',
'ef2efae259ce80a240de48ec85ecb062cecca26e4352ffb3fda562c21a93007b',
'http://ffmpeg.org/releases/ffmpeg-5.1.tar.xz',
'55eb6aab5ee235550fa54a33eaf8bf1b4ec66c01453182b12f6a993d75698b03',
'lib/libavcodec.a',
[
'--disable-shared', '--enable-static',
@ -166,7 +166,6 @@ ffmpeg = FfmpegProject(
'--disable-swscale',
'--disable-postproc',
'--disable-avfilter',
'--disable-lzo',
'--disable-faan',
'--disable-pixelutils',
'--disable-network',

View File

@ -520,9 +520,15 @@ FfmpegDecode(DecoderClient &client, InputStream *input,
return;
}
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 25, 100)
const unsigned channels = codec_context->ch_layout.nb_channels;
#else
const unsigned channels = codec_context->channels;
#endif
const auto audio_format = CheckAudioFormat(codec_context->sample_rate,
sample_format,
codec_context->channels);
channels);
const SignedSongTime total_time =
av_stream.duration != (int64_t)AV_NOPTS_VALUE
@ -632,10 +638,17 @@ FfmpegScanStream(AVFormatContext &format_context, TagHandler &handler)
AV_TIME_BASE_Q));
const auto &codec_params = *stream.codecpar;
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 25, 100)
const unsigned channels = codec_params.ch_layout.nb_channels;
#else
const unsigned channels = codec_params.channels;
#endif
try {
handler.OnAudioFormat(CheckAudioFormat(codec_params.sample_rate,
ffmpeg_sample_format(AVSampleFormat(codec_params.format)),
codec_params.channels));
channels));
} catch (...) {
}

View File

@ -21,10 +21,13 @@
#define __STDC_CONSTANT_MACROS
#include "FfmpegIo.hxx"
#include "libavutil/mem.h"
#include "../DecoderAPI.hxx"
#include "input/InputStream.hxx"
extern "C" {
#include <libavutil/mem.h>
}
AvioStream::~AvioStream()
{
if (io != nullptr) {

View File

@ -37,7 +37,11 @@ InterleaveFrame(const AVFrame &frame, FfmpegBuffer &buffer)
assert(frame.nb_samples > 0);
const auto format = AVSampleFormat(frame.format);
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 25, 100)
const unsigned channels = frame.ch_layout.nb_channels;
#else
const unsigned channels = frame.channels;
#endif
const std::size_t n_frames = frame.nb_samples;
int plane_size;

View File

@ -18,17 +18,25 @@ if icu_dep.found()
'Util.cxx',
'Init.cxx',
]
elif not get_option('iconv').disabled()
# an installed iconv library will make the builtin iconv() unavailable,
# so search for the library first and pass it as (possible) dependency
iconv_dep = compiler.find_library('libiconv', required: false)
have_iconv = compiler.has_function('iconv',
dependencies: iconv_dep,
prefix : '#include <iconv.h>')
else
if meson.version().version_compare('>= 0.60')
iconv_dep = dependency('iconv', required: get_option('iconv'))
conf.set('HAVE_ICONV', iconv_dep.found())
elif not get_option('iconv').disabled()
iconv_open_snippet = '''#include <iconv.h>
int main() {
iconv_open("","");
}'''
have_iconv = compiler.links(iconv_open_snippet, name: 'iconv_open')
if not have_iconv
iconv_dep = compiler.find_library('iconv', required: false)
have_iconv = compiler.links(iconv_open_snippet, dependencies: iconv_dep, name: 'iconv_open')
endif
if not have_iconv and get_option('iconv').enabled()
error('iconv() not available')
endif
conf.set('HAVE_ICONV', have_iconv)
endif
endif
icu = static_library(