Commit d6975d4f authored by Konstantin A. Lepikhov's avatar Konstantin A. Lepikhov

Merge tag 'v0.23.15' of https://github.com/MusicPlayerDaemon/MPD into sisyphus

release v0.23.15
parents 50587d59 b8bfc986
ver 0.23.15 (2023/12/20)
* decoder
- ffmpeg: fix build failure with FFmpeg 6.1
* output
- alsa: limit buffer time to 2 seconds
ver 0.23.14 (2023/10/08) ver 0.23.14 (2023/10/08)
* decoder * decoder
- flac: fix scanning files with non-ASCII names on Windows - flac: fix scanning files with non-ASCII names on Windows
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.musicpd" package="org.musicpd"
android:installLocation="auto" android:installLocation="auto"
android:versionCode="72" android:versionCode="73"
android:versionName="0.23.14"> android:versionName="0.23.15">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30"/> <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30"/>
......
...@@ -20,6 +20,7 @@ Some example code: ...@@ -20,6 +20,7 @@ Some example code:
.. code-block:: c .. code-block:: c
int
Foo(const char *abc, int xyz) Foo(const char *abc, int xyz)
{ {
if (abc == nullptr) { if (abc == nullptr) {
......
...@@ -691,7 +691,8 @@ Song ids on the other hand are stable: an id is assigned to a song ...@@ -691,7 +691,8 @@ Song ids on the other hand are stable: an id is assigned to a song
when it is added, and will stay the same, no matter how much it is when it is added, and will stay the same, no matter how much it is
moved around. Adding the same song twice will assign different ids to moved around. Adding the same song twice will assign different ids to
them, and a deleted-and-readded song will have a new id. This way, a them, and a deleted-and-readded song will have a new id. This way, a
client can always be sure the correct song is being used. client can always be sure the correct song is being used. Song ids are not
preserved across :program:`MPD` restarts.
Many commands come in two flavors, one for each address type. Many commands come in two flavors, one for each address type.
Whenever possible, ids should be used. Whenever possible, ids should be used.
......
project( project(
'mpd', 'mpd',
['c', 'cpp'], ['c', 'cpp'],
version: '0.23.14', version: '0.23.15',
meson_version: '>= 0.56.0', meson_version: '>= 0.56.0',
default_options: [ default_options: [
'c_std=c11', 'c_std=c11',
......
...@@ -54,6 +54,14 @@ set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix};{sysroot}") ...@@ -54,6 +54,14 @@ set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix};{sysroot}")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
""") """)
elif cmake_system_name == 'Windows':
# search libraries and headers only in the sysroot, not on
# the build host
f.write(f"""
set(CMAKE_FIND_ROOT_PATH "{toolchain.install_prefix}")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
""")
def configure(toolchain: AnyToolchain, src: str, build: str, args: list[str]=[], env: Optional[Mapping[str, str]]=None) -> None: def configure(toolchain: AnyToolchain, src: str, build: str, args: list[str]=[], env: Optional[Mapping[str, str]]=None) -> None:
cross_args: list[str] = [] cross_args: list[str] = []
......
...@@ -116,8 +116,8 @@ libmodplug = AutotoolsProject( ...@@ -116,8 +116,8 @@ libmodplug = AutotoolsProject(
) )
libopenmpt = AutotoolsProject( libopenmpt = AutotoolsProject(
'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.6.6+release.autotools.tar.gz', 'https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.7.3+release.autotools.tar.gz',
'6ddb9e26a430620944891796fefb1bbb38bd9148f6cfc558810c0d3f269876c7', '2cf8369b7916b09264f3f14b9fb6cef35a6e9bee0328dec4f49d98211ccfd722',
'lib/libopenmpt.a', 'lib/libopenmpt.a',
[ [
'--disable-shared', '--enable-static', '--disable-shared', '--enable-static',
...@@ -156,8 +156,8 @@ gme = CmakeProject( ...@@ -156,8 +156,8 @@ gme = CmakeProject(
) )
ffmpeg = FfmpegProject( ffmpeg = FfmpegProject(
'http://ffmpeg.org/releases/ffmpeg-6.0.tar.xz', 'http://ffmpeg.org/releases/ffmpeg-6.1.tar.xz',
'57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082', '488c76e57dd9b3bee901f71d5c95eaf1db4a5a31fe46a28654e837144207c270',
'lib/libavcodec.a', 'lib/libavcodec.a',
[ [
'--disable-shared', '--enable-static', '--disable-shared', '--enable-static',
...@@ -464,6 +464,8 @@ ffmpeg = FfmpegProject( ...@@ -464,6 +464,8 @@ ffmpeg = FfmpegProject(
'--disable-decoder=pam', '--disable-decoder=pam',
'--disable-decoder=pbm', '--disable-decoder=pbm',
'--disable-decoder=pcx', '--disable-decoder=pcx',
'--disable-decoder=pdv',
'--disable-decoder=pfm',
'--disable-decoder=pgm', '--disable-decoder=pgm',
'--disable-decoder=pgmyuv', '--disable-decoder=pgmyuv',
'--disable-decoder=pgssub', '--disable-decoder=pgssub',
...@@ -600,16 +602,16 @@ ffmpeg = FfmpegProject( ...@@ -600,16 +602,16 @@ ffmpeg = FfmpegProject(
) )
openssl = OpenSSLProject( openssl = OpenSSLProject(
('https://www.openssl.org/source/openssl-3.1.3.tar.gz', ('https://www.openssl.org/source/openssl-3.1.4.tar.gz',
'https://artfiles.org/openssl.org/source/openssl-3.1.3.tar.gz'), 'https://artfiles.org/openssl.org/source/openssl-3.1.4.tar.gz'),
'f0316a2ebd89e7f2352976445458689f80302093788c466692fb2a188b2eacf6', '840af5366ab9b522bde525826be3ef0fb0af81c6a9ebd84caa600fea1731eee3',
'include/openssl/ossl_typ.h', 'include/openssl/ossl_typ.h',
) )
curl = CmakeProject( curl = CmakeProject(
('https://curl.se/download/curl-8.2.1.tar.xz', ('https://curl.se/download/curl-8.5.0.tar.xz',
'https://github.com/curl/curl/releases/download/curl-8_2_1/curl-8.2.1.tar.xz'), 'https://github.com/curl/curl/releases/download/curl-8_5_0/curl-8.5.0.tar.xz'),
'dd322f6bd0a20e6cebdfd388f69e98c3d183bed792cf4713c8a7ef498cba4894', '42ab8db9e20d8290a3b633e7fbb3cec15db34df65fd1015ef8ac1e4723750eeb',
'lib/libcurl.a', 'lib/libcurl.a',
[ [
'-DBUILD_CURL_EXE=OFF', '-DBUILD_CURL_EXE=OFF',
......
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
extern "C" { extern "C" {
#include <libavutil/mem.h> #include <libavutil/mem.h>
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 29, 100)
#include <libavutil/error.h>
#endif
} }
AvioStream::~AvioStream() AvioStream::~AvioStream()
......
...@@ -234,7 +234,7 @@ AlsaInputStream::PrepareSockets() noexcept ...@@ -234,7 +234,7 @@ AlsaInputStream::PrepareSockets() noexcept
void void
AlsaInputStream::DispatchSockets() noexcept AlsaInputStream::DispatchSockets() noexcept
{ try {
non_block.DispatchSockets(*this, capture_handle); non_block.DispatchSockets(*this, capture_handle);
const std::scoped_lock<Mutex> protect(mutex); const std::scoped_lock<Mutex> protect(mutex);
...@@ -253,16 +253,17 @@ AlsaInputStream::DispatchSockets() noexcept ...@@ -253,16 +253,17 @@ AlsaInputStream::DispatchSockets() noexcept
if (n_frames == -EAGAIN) if (n_frames == -EAGAIN)
return; return;
if (Recover(n_frames) < 0) { if (Recover(n_frames) < 0)
postponed_exception = std::make_exception_ptr(std::runtime_error("PCM error - stream aborted")); throw std::runtime_error("PCM error - stream aborted");
InvokeOnAvailable();
return;
}
} }
size_t nbytes = n_frames * frame_size; size_t nbytes = n_frames * frame_size;
CommitWriteBuffer(nbytes); CommitWriteBuffer(nbytes);
} }
catch (...) {
postponed_exception = std::current_exception();
InvokeOnAvailable();
}
inline int inline int
AlsaInputStream::Recover(int err) AlsaInputStream::Recover(int err)
...@@ -369,9 +370,14 @@ AlsaInputStream::ConfigureCapture(AudioFormat audio_format) ...@@ -369,9 +370,14 @@ AlsaInputStream::ConfigureCapture(AudioFormat audio_format)
period_size_min, period_size_max, period_size_min, period_size_max,
period_time_min, period_time_max); period_time_min, period_time_max);
/* choose the maximum possible buffer_size ... */ /* choose the maximum buffer_time up to limit of 2 seconds ... */
snd_pcm_hw_params_set_buffer_size(capture_handle, hw_params, unsigned buffer_time = buffer_time_max;
buffer_size_max); if (buffer_time > 2000000U)
buffer_time = 2000000U;
int direction = -1;
if ((err = snd_pcm_hw_params_set_buffer_time_near(capture_handle,
hw_params, &buffer_time, &direction)) < 0)
throw Alsa::MakeError(err, "Cannot set buffer time");
/* ... and calculate the period_size to have four periods in /* ... and calculate the period_size to have four periods in
one buffer; this way, we get woken up often enough to avoid one buffer; this way, we get woken up often enough to avoid
...@@ -379,7 +385,7 @@ AlsaInputStream::ConfigureCapture(AudioFormat audio_format) ...@@ -379,7 +385,7 @@ AlsaInputStream::ConfigureCapture(AudioFormat audio_format)
snd_pcm_uframes_t buffer_size; snd_pcm_uframes_t buffer_size;
if (snd_pcm_hw_params_get_buffer_size(hw_params, &buffer_size) == 0) { if (snd_pcm_hw_params_get_buffer_size(hw_params, &buffer_size) == 0) {
snd_pcm_uframes_t period_size = buffer_size / 4; snd_pcm_uframes_t period_size = buffer_size / 4;
int direction = -1; direction = -1;
if ((err = snd_pcm_hw_params_set_period_size_near(capture_handle, if ((err = snd_pcm_hw_params_set_period_size_near(capture_handle,
hw_params, &period_size, &direction)) < 0) hw_params, &period_size, &direction)) < 0)
throw Alsa::MakeError(err, "Cannot set period size"); throw Alsa::MakeError(err, "Cannot set period size");
......
Index: curl-7.84.0/CMakeLists.txt Index: curl-7.85.0/CMakeLists.txt
=================================================================== ===================================================================
--- curl-7.84.0.orig/CMakeLists.txt --- curl-7.85.0.orig/CMakeLists.txt
+++ curl-7.84.0/CMakeLists.txt +++ curl-7.85.0/CMakeLists.txt
@@ -1536,7 +1536,7 @@ set(includedir "\${prefix}/ @@ -1655,7 +1655,7 @@
set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
set(LIBCURL_LIBS "") set(LIBCURL_LIBS "")
set(libdir "${CMAKE_INSTALL_PREFIX}/lib") set(libdir "${CMAKE_INSTALL_PREFIX}/lib")
-foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS}) - foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS})
+foreach(_lib ${CURL_LIBS}) + foreach(_lib ${CURL_LIBS})
if(TARGET "${_lib}") if(TARGET "${_lib}")
set(_libname "${_lib}") set(_libname "${_lib}")
get_target_property(_imported "${_libname}" IMPORTED) get_target_property(_imported "${_libname}" IMPORTED)
...@@ -100,9 +100,11 @@ FormatHResultError(HRESULT result, const char *fmt, ...) noexcept ...@@ -100,9 +100,11 @@ FormatHResultError(HRESULT result, const char *fmt, ...) noexcept
va_start(args1, fmt); va_start(args1, fmt);
va_copy(args2, args1); va_copy(args2, args1);
const int size = vsnprintf(nullptr, 0, fmt, args1); int size = vsnprintf(nullptr, 0, fmt, args1);
va_end(args1); va_end(args1);
assert(size >= 0);
if (size < 0)
size = 0;
auto buffer = std::make_unique<char[]>(size + 1); auto buffer = std::make_unique<char[]>(size + 1);
vsprintf(buffer.get(), fmt, args2); vsprintf(buffer.get(), fmt, args2);
......
[wrap-file] [wrap-file]
directory = fmt-9.1.0 directory = fmt-10.1.1
source_url = https://github.com/fmtlib/fmt/archive/9.1.0.tar.gz source_url = https://github.com/fmtlib/fmt/archive/10.1.1.tar.gz
source_filename = fmt-9.1.0.tar.gz source_filename = fmt-10.1.1.tar.gz
source_hash = 5dea48d1fcddc3ec571ce2058e13910a0d4a6bab4cc09a809d8b1dd1c88ae6f2 source_hash = 78b8c0a72b1c35e4443a7e308df52498252d1cefc2b08c9a97bc9ee6cfe61f8b
patch_filename = fmt_9.1.0-1_patch.zip patch_filename = fmt_10.1.1-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/fmt_9.1.0-1/get_patch patch_url = https://wrapdb.mesonbuild.com/v2/fmt_10.1.1-1/get_patch
patch_hash = 4557b9ba87b3eb63694ed9b21d1a2117d4a97ca56b91085b10288e9a5294adf8 patch_hash = adec33acaf87c0859c52b242a44bc71c3427751da3f1adaed511f4186794a42f
wrapdb_version = 9.1.0-1 source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_10.1.1-1/fmt-10.1.1.tar.gz
wrapdb_version = 10.1.1-1
[provide] [provide]
fmt = fmt_dep fmt = fmt_dep
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