Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mpd for openSUSE:Factory checked in 
at 2022-06-02 21:54:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mpd (Old)
 and      /work/SRC/openSUSE:Factory/.mpd.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mpd"

Thu Jun  2 21:54:08 2022 rev:40 rq:980373 version:0.23.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/mpd/mpd.changes  2022-03-30 20:36:02.349321640 
+0200
+++ /work/SRC/openSUSE:Factory/.mpd.new.1548/mpd.changes        2022-06-02 
21:54:14.720371331 +0200
@@ -1,0 +2,12 @@
+Wed Jun  1 14:58:09 UTC 2022 - ???????? ???????????? <i...@ilya.cf>
+
+- Updated to 0.23.7
+  * https://raw.githubusercontent.com/MusicPlayerDaemon/MPD/v0.23.7/NEWS
+  * decoder:
+    * ffmpeg: fix HLS seeking
+    * opus: fix missing song length on high-latency files
+  * mixer:
+    * pipewire: fix volume restore
+    * software: update volume of disabled outputs
+
+-------------------------------------------------------------------
@@ -36 +48 @@
-Fri Nov 12 23:12:23 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Fri Nov 12 23:12:23 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -52 +64 @@
-Sat Nov  6 02:02:33 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Sat Nov  6 02:02:33 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -109 +121 @@
-Wed Sep  1 07:24:21 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Wed Sep  1 07:24:21 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -120 +132 @@
-Tue Aug 17 07:55:08 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Tue Aug 17 07:55:08 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -141 +153 @@
-Sun Jun 27 11:12:37 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Sun Jun 27 11:12:37 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -159 +171 @@
-Fri May 21 06:04:21 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Fri May 21 06:04:21 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -191 +203 @@
-Sat Jan 23 11:49:19 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+Sat Jan 23 11:49:19 UTC 2021 - ???????? ???????????? <i...@ilya.cf>
@@ -206 +218 @@
-Mon Nov  9 06:24:26 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Mon Nov  9 06:24:26 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -219 +231 @@
-Wed Oct 28 22:04:23 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Wed Oct 28 22:04:23 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -242 +254 @@
-Wed Sep 30 01:36:05 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Wed Sep 30 01:36:05 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -359 +371 @@
-Mon Jun 22 10:33:14 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Mon Jun 22 10:33:14 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -373 +385 @@
-Sat Apr 25 18:01:18 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Sat Apr 25 18:01:18 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -389 +401 @@
-Sat Apr  4 22:04:54 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Sat Apr  4 22:04:54 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -400 +412 @@
-Fri Mar 27 15:53:58 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Fri Mar 27 15:53:58 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -412 +424 @@
-Thu Feb 27 06:59:18 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Thu Feb 27 06:59:18 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -423 +435 @@
-Mon Jan 20 07:42:18 UTC 2020 - ???????? ???????????? <i...@ilya.pp.ua>
+Mon Jan 20 07:42:18 UTC 2020 - ???????? ???????????? <i...@ilya.cf>
@@ -435 +447 @@
-Sat Dec 28 10:42:29 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua>
+Sat Dec 28 10:42:29 UTC 2019 - ???????? ???????????? <i...@ilya.cf>
@@ -449 +461 @@
-Wed Dec 18 15:55:55 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua>
+Wed Dec 18 15:55:55 UTC 2019 - ???????? ???????????? <i...@ilya.cf>
@@ -464 +476 @@
-Wed Oct 16 11:36:22 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua>
+Wed Oct 16 11:36:22 UTC 2019 - ???????? ???????????? <i...@ilya.cf>
@@ -479 +491 @@
-Tue Oct  8 08:02:09 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua>
+Tue Oct  8 08:02:09 UTC 2019 - ???????? ???????????? <i...@ilya.cf>
@@ -523 +535 @@
-Tue Jul 23 07:42:13 UTC 2019 - ???????? ???????????? <i...@ilya.pp.ua>
+Tue Jul 23 07:42:13 UTC 2019 - ???????? ???????????? <i...@ilya.cf>

Old:
----
  mpd-0.23.6.tar.xz
  mpd-0.23.6.tar.xz.sig

New:
----
  mpd-0.23.7.tar.xz
  mpd-0.23.7.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mpd.spec ++++++
--- /var/tmp/diff_new_pack.mCRtc3/_old  2022-06-02 21:54:15.408372207 +0200
+++ /var/tmp/diff_new_pack.mCRtc3/_new  2022-06-02 21:54:15.412372212 +0200
@@ -20,7 +20,7 @@
 %bcond_with    faad
 %bcond_without mpd_iso9660
 Name:           mpd
-Version:        0.23.6
+Version:        0.23.7
 Release:        0
 Summary:        Music Player Daemon
 License:        GPL-2.0-or-later

++++++ mpd-0.23.6.tar.xz -> mpd-0.23.7.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/NEWS new/mpd-0.23.7/NEWS
--- old/mpd-0.23.6/NEWS 2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/NEWS 2022-05-09 23:04:30.000000000 +0200
@@ -1,3 +1,16 @@
+ver 0.23.7 (2022/05/09)
+* database
+  - upnp: support pupnp 1.14
+* decoder
+  - ffmpeg: fix HLS seeking
+  - opus: fix missing song length on high-latency files
+* output
+  - shout: require at least libshout 2.4.0
+* mixer
+  - pipewire: fix volume restore
+  - software: update volume of disabled outputs
+* support libiconv
+
 ver 0.23.6 (2022/03/14)
 * protocol
   - support filename "cover.webp" for "albumart" command
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/android/AndroidManifest.xml 
new/mpd-0.23.7/android/AndroidManifest.xml
--- old/mpd-0.23.6/android/AndroidManifest.xml  2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/android/AndroidManifest.xml  2022-05-09 23:04:30.000000000 
+0200
@@ -2,8 +2,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android";
           package="org.musicpd"
           android:installLocation="auto"
-          android:versionCode="65"
-          android:versionName="0.23.5">
+          android:versionCode="66"
+          android:versionName="0.23.7">
 
   <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
 
@@ -19,6 +19,7 @@
   <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 
   <application android:allowBackup="true"
+               android:debuggable="true"
                android:requestLegacyExternalStorage="true"
                android:icon="@drawable/icon"
                android:banner="@drawable/icon"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/android/gdb.sh 
new/mpd-0.23.7/android/gdb.sh
--- old/mpd-0.23.6/android/gdb.sh       1970-01-01 01:00:00.000000000 +0100
+++ new/mpd-0.23.7/android/gdb.sh       2022-05-09 23:04:30.000000000 +0200
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# This script need the following modification in ANDROID_NDK in order to attach
+# to the good :main pid
+#--- a/prebuilt/linux-x86_64/bin/ndk-gdb.py
+#+++ b/prebuilt/linux-x86_64/bin/ndk-gdb.py
+#@@ -669,7 +669,7 @@
+#             log("Sleeping for {} seconds.".format(args.delay))
+#             time.sleep(args.delay)
+#
+#-    pids = gdbrunner.get_pids(device, pkg_name)
+#+    pids = gdbrunner.get_pids(device, pkg_name + ":main")
+#     if len(pids) == 0:
+#         error("Failed to find running process '{}'".format(pkg_name))
+#     if len(pids) > 1:
+
+SCRIPT_PATH=$(dirname $0)
+BUILD_PATH="`pwd`"
+TMP_PATH="$BUILD_PATH/gdb"
+NDK_GDB_ARGS="--force"
+ANDROID_NDK=$1
+
+if [ ! -f $ANDROID_NDK/source.properties ];then
+    echo "usage: $0 ANDROID_NDK"
+    exit 1
+fi
+
+if [ ! -f $BUILD_PATH/libmpd.so ];then
+    echo "This script need to be executed from the android build directory"
+    exit 1
+fi
+
+rm -rf "$TMP_PATH"
+mkdir -p "$TMP_PATH"
+
+ANDROID_MANIFEST="$SCRIPT_PATH/AndroidManifest.xml"
+ABI=`ls "$BUILD_PATH/android/apk/apk/lib" --sort=time | head -n 1`
+
+if [ ! -f "$ANDROID_MANIFEST" -o "$ABI" = "" ]; then
+    echo "Invalid manifest/ABI, did you try building first ?"
+    exit 1
+fi
+
+mkdir -p "$TMP_PATH"/jni
+touch "$TMP_PATH"/jni/Android.mk
+echo "APP_ABI := $ABI" > "$TMP_PATH"/jni/Application.mk
+
+DEST=obj/local/$ABI
+mkdir -p "$TMP_PATH/$DEST"
+
+cp "$BUILD_PATH/libmpd.so" "$TMP_PATH/$DEST"
+cp "$ANDROID_MANIFEST" "$TMP_PATH"
+
+(cd "$TMP_PATH" && bash $ANDROID_NDK/ndk-gdb $NDK_GDB_ARGS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/doc/conf.py new/mpd-0.23.7/doc/conf.py
--- old/mpd-0.23.6/doc/conf.py  2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/doc/conf.py  2022-05-09 23:04:30.000000000 +0200
@@ -38,7 +38,7 @@
 # built documents.
 #
 # The short X.Y version.
-version = '0.23.6'
+version = '0.23.7'
 # The full version, including alpha/beta/rc tags.
 #release = version + '~git'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/doc/protocol.rst 
new/mpd-0.23.7/doc/protocol.rst
--- old/mpd-0.23.6/doc/protocol.rst     2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/doc/protocol.rst     2022-05-09 23:04:30.000000000 +0200
@@ -545,6 +545,13 @@
     Sets repeat state to ``STATE``,
     ``STATE`` should be 0 or 1.
 
+    If enabled, MPD keeps repeating the whole queue (:ref:`single mode
+    <command_single>` disabled) or the current song (:ref:`single mode
+    <command_single>` enabled).
+
+    If :ref:`random mode <command_random>` is also enabled, the
+    playback order will be shuffled each time the queue gets repeated.
+
 .. _command_setvol:
 
 :command:`setvol {VOL}`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/meson.build new/mpd-0.23.7/meson.build
--- old/mpd-0.23.6/meson.build  2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/meson.build  2022-05-09 23:04:30.000000000 +0200
@@ -1,7 +1,7 @@
 project(
   'mpd',
   ['c', 'cpp'],
-  version: '0.23.6',
+  version: '0.23.7',
   meson_version: '>= 0.56.0',
   default_options: [
     'c_std=c11',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/python/build/libs.py 
new/mpd-0.23.7/python/build/libs.py
--- old/mpd-0.23.6/python/build/libs.py 2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/python/build/libs.py 2022-05-09 23:04:30.000000000 +0200
@@ -55,8 +55,8 @@
 )
 
 zlib = ZlibProject(
-    'http://zlib.net/zlib-1.2.11.tar.xz',
-    '4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066',
+    'http://zlib.net/zlib-1.2.12.tar.xz',
+    '7db46b8d7726232a621befaab4a1c870f00a90805511c0e0090441dac57def18',
     'lib/libz.a',
 )
 
@@ -151,8 +151,8 @@
 )
 
 ffmpeg = FfmpegProject(
-    'http://ffmpeg.org/releases/ffmpeg-5.0.tar.xz',
-    '51e919f7d205062c0fd4fae6243a84850391115104ccf1efc451733bc0ac7298',
+    'http://ffmpeg.org/releases/ffmpeg-5.0.1.tar.xz',
+    'ef2efae259ce80a240de48ec85ecb062cecca26e4352ffb3fda562c21a93007b',
     'lib/libavcodec.a',
     [
         '--disable-shared', '--enable-static',
@@ -380,14 +380,14 @@
 )
 
 openssl = OpenSSLProject(
-    'https://www.openssl.org/source/openssl-3.0.1.tar.gz',
-    'c311ad853353bce796edad01a862c50a8a587f62e7e2100ef465ab53ec9b06d1',
+    'https://www.openssl.org/source/openssl-3.0.3.tar.gz',
+    '9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f',
     'include/openssl/ossl_typ.h',
 )
 
 curl = CmakeProject(
-    'https://curl.se/download/curl-7.82.0.tar.xz',
-    '0aaa12d7bd04b0966254f2703ce80dd5c38dbbd76af0297d3d690cdce58a583c',
+    'https://curl.se/download/curl-7.83.0.tar.xz',
+    'bbff0e6b5047e773f3c3b084d80546cc1be4e354c09e419c2d0ef6116253511a',
     'lib/libcurl.a',
     [
         '-DBUILD_CURL_EXE=OFF',
@@ -444,7 +444,7 @@
 )
 
 boost = BoostProject(
-    
'https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.bz2',
-    '8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc',
+    
'https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.bz2',
+    '475d589d51a7f8b3ba2ba4eda022b170e562ca3b760ee922c146b6c65856ef39',
     'include/boost/version.hpp',
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mpd-0.23.6/src/decoder/plugins/FfmpegDecoderPlugin.cxx 
new/mpd-0.23.7/src/decoder/plugins/FfmpegDecoderPlugin.cxx
--- old/mpd-0.23.6/src/decoder/plugins/FfmpegDecoderPlugin.cxx  2022-03-14 
18:55:47.000000000 +0100
+++ new/mpd-0.23.7/src/decoder/plugins/FfmpegDecoderPlugin.cxx  2022-05-09 
23:04:30.000000000 +0200
@@ -384,7 +384,8 @@
 FfmpegParseMetaData(const AVStream &stream,
                    ReplayGainInfo &rg, MixRampInfo &mr)
 {
-       FfmpegParseMetaData(*stream.metadata, rg, mr);
+       if (stream.metadata != nullptr)
+               FfmpegParseMetaData(*stream.metadata, rg, mr);
 }
 
 static void
@@ -393,7 +394,9 @@
 {
        assert(audio_stream >= 0);
 
-       FfmpegParseMetaData(*format_context.metadata, rg, mr);
+       if (format_context.metadata != nullptr)
+               FfmpegParseMetaData(*format_context.metadata, rg, mr);
+
        FfmpegParseMetaData(*format_context.streams[audio_stream],
                                    rg, mr);
 }
@@ -468,7 +471,7 @@
 IsSeekable(const AVFormatContext &format_context) noexcept
 {
 #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(58, 6, 100)
-       return (format_context.ctx_flags & AVFMTCTX_UNSEEKABLE) != 0;
+       return (format_context.ctx_flags & AVFMTCTX_UNSEEKABLE) == 0;
 #else
        (void)format_context;
        return false;
@@ -530,9 +533,8 @@
                : FromFfmpegTimeChecked(format_context.duration, 
AV_TIME_BASE_Q);
 
        client.Ready(audio_format,
-                    input
-                    ? input->IsSeekable()
-                    : IsSeekable(format_context),
+                    (input ? input->IsSeekable() : false)
+                    || IsSeekable(format_context),
                     total_time);
 
        FfmpegParseMetaData(client, format_context, audio_stream);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/encoder/meson.build 
new/mpd-0.23.7/src/encoder/meson.build
--- old/mpd-0.23.6/src/encoder/meson.build      2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/encoder/meson.build      2022-05-09 23:04:30.000000000 
+0200
@@ -3,6 +3,23 @@
 encoder_features.set('ENABLE_ENCODER', need_encoder)
 
 if not need_encoder
+  if need_wave_encoder
+    # Special case for the Snapcast output plugin which only needs the
+    # PCM wave encoder encoder plugin
+    encoder_glue = static_library(
+      'encoder_glue',
+      'plugins/WaveEncoderPlugin.cxx',
+      include_directories: inc,
+    )
+
+    encoder_glue_dep = declare_dependency(
+      link_with: encoder_glue,
+    )
+
+    configure_file(output: 'Features.h', configuration: encoder_features)
+    subdir_done()
+  endif
+
   encoder_glue_dep = dependency('', required: false)
   configure_file(output: 'Features.h', configuration: encoder_features)
   subdir_done()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/encoder/plugins/meson.build 
new/mpd-0.23.7/src/encoder/plugins/meson.build
--- old/mpd-0.23.6/src/encoder/plugins/meson.build      2022-03-14 
18:55:47.000000000 +0100
+++ new/mpd-0.23.7/src/encoder/plugins/meson.build      2022-05-09 
23:04:30.000000000 +0200
@@ -35,7 +35,7 @@
 endif
 
 encoder_features.set('ENABLE_WAVE_ENCODER', get_option('wave_encoder'))
-if get_option('wave_encoder')
+if get_option('wave_encoder') or need_wave_encoder
   encoder_plugins_sources += 'WaveEncoderPlugin.cxx'
 endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/lib/icu/meson.build 
new/mpd-0.23.7/src/lib/icu/meson.build
--- old/mpd-0.23.6/src/lib/icu/meson.build      2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/lib/icu/meson.build      2022-05-09 23:04:30.000000000 
+0200
@@ -12,17 +12,23 @@
   icu_sources += 'Win32.cxx'
 endif
 
+iconv_dep = []
 if icu_dep.found()
   icu_sources += [
     'Util.cxx',
     'Init.cxx',
   ]
 elif not get_option('iconv').disabled()
-  have_iconv = compiler.has_function('iconv', prefix : '#include <iconv.h>')
-  conf.set('HAVE_ICONV', have_iconv)
+  # 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>')
   if not have_iconv and get_option('iconv').enabled()
     error('iconv() not available')
   endif
+  conf.set('HAVE_ICONV', have_iconv)
 endif
 
 icu = static_library(
@@ -31,6 +37,7 @@
   include_directories: inc,
   dependencies: [
     icu_dep,
+    iconv_dep,
     fmt_dep,
   ],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/lib/upnp/Init.cxx 
new/mpd-0.23.7/src/lib/upnp/Init.cxx
--- old/mpd-0.23.6/src/lib/upnp/Init.cxx        2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/lib/upnp/Init.cxx        2022-05-09 23:04:30.000000000 
+0200
@@ -35,13 +35,7 @@
 static void
 DoInit(const char* iface)
 {
-
-#ifdef UPNP_ENABLE_IPV6
-       auto code = UpnpInit2(iface, 0);
-#else
-       auto code = UpnpInit(iface, 0);
-#endif
-       if (code != UPNP_E_SUCCESS)
+       if (auto code = UpnpInit2(iface, 0); code != UPNP_E_SUCCESS)
                throw FormatRuntimeError("UpnpInit() failed: %s",
                                         UpnpGetErrorMessage(code));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/lib/xiph/OggSyncState.cxx 
new/mpd-0.23.7/src/lib/xiph/OggSyncState.cxx
--- old/mpd-0.23.6/src/lib/xiph/OggSyncState.cxx        2022-03-14 
18:55:47.000000000 +0100
+++ new/mpd-0.23.7/src/lib/xiph/OggSyncState.cxx        2022-05-09 
23:04:30.000000000 +0200
@@ -67,7 +67,7 @@
 bool
 OggSyncState::ExpectPageSeek(ogg_page &page)
 {
-       size_t remaining_skipped = 32768;
+       size_t remaining_skipped = 65536;
 
        while (true) {
                int r = ogg_sync_pageseek(&oy, &page);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/mixer/MixerAll.cxx 
new/mpd-0.23.7/src/mixer/MixerAll.cxx
--- old/mpd-0.23.6/src/mixer/MixerAll.cxx       2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/mixer/MixerAll.cxx       2022-05-09 23:04:30.000000000 
+0200
@@ -34,13 +34,15 @@
 static int
 output_mixer_get_volume(const AudioOutputControl &ao) noexcept
 {
-       if (!ao.IsEnabled())
-               return -1;
-
        auto *mixer = ao.GetMixer();
        if (mixer == nullptr)
                return -1;
 
+       /* software mixers are always considered, even if they are
+          disabled */
+       if (!ao.IsEnabled() && !mixer->IsPlugin(software_mixer_plugin))
+               return -1;
+
        try {
                return mixer_get_volume(mixer);
        } catch (...) {
@@ -76,13 +78,15 @@
 {
        assert(volume <= 100);
 
-       if (!ao.IsEnabled())
-               return false;
-
        auto *mixer = ao.GetMixer();
        if (mixer == nullptr)
                return false;
 
+       /* software mixers are always updated, even if they are
+          disabled */
+       if (!ao.IsReallyEnabled() && !mixer->IsPlugin(software_mixer_plugin))
+               return false;
+
        try {
                mixer_set_volume(mixer, volume);
                return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/output/Control.hxx 
new/mpd-0.23.7/src/output/Control.hxx
--- old/mpd-0.23.6/src/output/Control.hxx       2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/output/Control.hxx       2022-05-09 23:04:30.000000000 
+0200
@@ -291,6 +291,13 @@
        /**
         * Caller must lock the mutex.
         */
+       bool IsReallyEnabled() const noexcept {
+               return really_enabled;
+       }
+
+       /**
+        * Caller must lock the mutex.
+        */
        bool IsEnabled() const noexcept {
                return enabled;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mpd-0.23.6/src/output/plugins/PipeWireOutputPlugin.cxx 
new/mpd-0.23.7/src/output/plugins/PipeWireOutputPlugin.cxx
--- old/mpd-0.23.6/src/output/plugins/PipeWireOutputPlugin.cxx  2022-03-14 
18:55:47.000000000 +0100
+++ new/mpd-0.23.7/src/output/plugins/PipeWireOutputPlugin.cxx  2022-05-09 
23:04:30.000000000 +0200
@@ -638,8 +638,8 @@
                             [[maybe_unused]] const struct spa_pod *param) 
noexcept
 {
        if (restore_volume) {
-               SetVolume(volume);
                restore_volume = false;
+               SetVolume(volume);
        }
 
 #if defined(ENABLE_DSD) && defined(SPA_AUDIO_DSD_FLAG_NONE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/output/plugins/ShoutOutputPlugin.cxx 
new/mpd-0.23.7/src/output/plugins/ShoutOutputPlugin.cxx
--- old/mpd-0.23.6/src/output/plugins/ShoutOutputPlugin.cxx     2022-03-14 
18:55:47.000000000 +0100
+++ new/mpd-0.23.7/src/output/plugins/ShoutOutputPlugin.cxx     2022-05-09 
23:04:30.000000000 +0200
@@ -59,7 +59,7 @@
 public:
        ShoutConfig(const ConfigBlock &block, const char *mime_type);
 
-       void Setup(shout_t *connection) const;
+       void Setup(shout_t &connection) const;
 };
 
 struct ShoutOutput final : AudioOutput {
@@ -229,41 +229,56 @@
        return new ShoutOutput(block);
 }
 
+static void
+SetMeta(shout_t &connection, const char *name, const char *value)
+{
+       if (shout_set_meta(&connection, name, value) != SHOUTERR_SUCCESS)
+               throw std::runtime_error(shout_get_error(&connection));
+}
+
+static void
+SetOptionalMeta(shout_t &connection, const char *name, const char *value)
+{
+       if (value != nullptr)
+               SetMeta(connection, name, value);
+}
+
 inline void
-ShoutConfig::Setup(shout_t *connection) const
+ShoutConfig::Setup(shout_t &connection) const
 {
-       if (shout_set_host(connection, host) != SHOUTERR_SUCCESS ||
-           shout_set_port(connection, port) != SHOUTERR_SUCCESS ||
-           shout_set_password(connection, passwd) != SHOUTERR_SUCCESS ||
-           shout_set_mount(connection, mount) != SHOUTERR_SUCCESS ||
-           shout_set_name(connection, name) != SHOUTERR_SUCCESS ||
-           shout_set_user(connection, user) != SHOUTERR_SUCCESS ||
-           shout_set_public(connection, is_public) != SHOUTERR_SUCCESS ||
-           shout_set_format(connection, format) != SHOUTERR_SUCCESS ||
-           shout_set_protocol(connection, protocol) != SHOUTERR_SUCCESS ||
+       if (shout_set_host(&connection, host) != SHOUTERR_SUCCESS ||
+           shout_set_port(&connection, port) != SHOUTERR_SUCCESS ||
+           shout_set_password(&connection, passwd) != SHOUTERR_SUCCESS ||
+           shout_set_mount(&connection, mount) != SHOUTERR_SUCCESS ||
+           shout_set_user(&connection, user) != SHOUTERR_SUCCESS ||
+           shout_set_public(&connection, is_public) != SHOUTERR_SUCCESS ||
+#ifdef SHOUT_USAGE_AUDIO
+           /* since libshout 2.4.3 */
+           shout_set_content_format(&connection, format, SHOUT_USAGE_AUDIO,
+                                    nullptr) != SHOUTERR_SUCCESS ||
+#else
+           shout_set_format(&connection, format) != SHOUTERR_SUCCESS ||
+#endif
+           shout_set_protocol(&connection, protocol) != SHOUTERR_SUCCESS ||
 #ifdef SHOUT_TLS
-           shout_set_tls(connection, tls) != SHOUTERR_SUCCESS ||
+           shout_set_tls(&connection, tls) != SHOUTERR_SUCCESS ||
 #endif
-           shout_set_agent(connection, "MPD") != SHOUTERR_SUCCESS)
-               throw std::runtime_error(shout_get_error(connection));
-
-       /* optional paramters */
+           shout_set_agent(&connection, "MPD") != SHOUTERR_SUCCESS)
+               throw std::runtime_error(shout_get_error(&connection));
 
-       if (genre != nullptr && shout_set_genre(connection, genre))
-               throw std::runtime_error(shout_get_error(connection));
+       SetMeta(connection, SHOUT_META_NAME, name);
 
-       if (description != nullptr &&
-           shout_set_description(connection, description))
-               throw std::runtime_error(shout_get_error(connection));
+       /* optional paramters */
 
-       if (url != nullptr && shout_set_url(connection, url))
-               throw std::runtime_error(shout_get_error(connection));
+       SetOptionalMeta(connection, SHOUT_META_GENRE, genre);
+       SetOptionalMeta(connection, SHOUT_META_DESCRIPTION, description);
+       SetOptionalMeta(connection, SHOUT_META_URL, url);
 
        if (quality != nullptr)
-               shout_set_audio_info(connection, SHOUT_AI_QUALITY, quality);
+               shout_set_audio_info(&connection, SHOUT_AI_QUALITY, quality);
 
        if (bitrate != nullptr)
-               shout_set_audio_info(connection, SHOUT_AI_BITRATE, bitrate);
+               shout_set_audio_info(&connection, SHOUT_AI_BITRATE, bitrate);
 }
 
 void
@@ -274,7 +289,7 @@
                throw std::bad_alloc{};
 
        try {
-               config.Setup(shout_conn);
+               config.Setup(*shout_conn);
        } catch (...) {
                shout_free(shout_conn);
                throw;
@@ -418,7 +433,7 @@
 }
 
 static void
-shout_tag_to_metadata(const Tag &tag, char *dest, size_t size)
+shout_tag_to_metadata(const Tag &tag, char *dest, size_t size) noexcept
 {
        const char *artist = tag.GetValue(TAG_ARTIST);
        const char *title = tag.GetValue(TAG_TITLE);
@@ -446,9 +461,15 @@
                char song[1024];
                shout_tag_to_metadata(tag, song, sizeof(song));
 
-               shout_metadata_add(meta, "song", song);
-               shout_metadata_add(meta, "charset", "UTF-8");
-               if (SHOUTERR_SUCCESS != shout_set_metadata(shout_conn, meta)) {
+               if (SHOUTERR_SUCCESS != shout_metadata_add(meta, "song", song) 
||
+#ifdef SHOUT_FORMAT_TEXT
+                   /* since libshout 2.4.6 */
+                   SHOUTERR_SUCCESS != shout_set_metadata_utf8(shout_conn, 
meta)
+#else
+                   SHOUTERR_SUCCESS != shout_metadata_add(meta, "charset", 
"UTF-8") ||
+                   SHOUTERR_SUCCESS != shout_set_metadata(shout_conn, meta)
+#endif
+                       ) {
                        LogWarning(shout_output_domain,
                                   "error setting shout metadata");
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/output/plugins/meson.build 
new/mpd-0.23.7/src/output/plugins/meson.build
--- old/mpd-0.23.6/src/output/plugins/meson.build       2022-03-14 
18:55:47.000000000 +0100
+++ new/mpd-0.23.7/src/output/plugins/meson.build       2022-05-09 
23:04:30.000000000 +0200
@@ -10,6 +10,7 @@
 ]
 
 need_encoder = false
+need_wave_encoder = false
 
 if alsa_dep.found()
   output_plugins_sources += 'AlsaOutputPlugin.cxx'
@@ -99,7 +100,7 @@
   need_encoder = true
 endif
 
-libshout_dep = dependency('shout', required: get_option('shout'))
+libshout_dep = dependency('shout', version: '>= 2.4.0', required: 
get_option('shout'))
 output_features.set('HAVE_SHOUT', libshout_dep.found())
 if libshout_dep.found()
   output_plugins_sources += 'ShoutOutputPlugin.cxx'
@@ -127,9 +128,7 @@
 
   output_features.set('HAVE_YAJL', yajl_dep.found())
 
-  # TODO: the Snapcast plugin needs just the "wave" encoder, but this
-  # enables all available encoders
-  need_encoder = true
+  need_wave_encoder = true
 endif
 
 enable_solaris_output = get_option('solaris_output')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/tag/ApeLoader.cxx 
new/mpd-0.23.7/src/tag/ApeLoader.cxx
--- old/mpd-0.23.6/src/tag/ApeLoader.cxx        2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/tag/ApeLoader.cxx        2022-05-09 23:04:30.000000000 
+0200
@@ -73,10 +73,10 @@
        unsigned n = FromLE32(footer.count);
        const char *p = buffer.get();
        while (n-- && remaining > 10) {
-               size_t size = FromLE32(*(const uint32_t *)p);
+               size_t size = *(const PackedLE32 *)p;
                p += 4;
                remaining -= 4;
-               unsigned long flags = FromLE32(*(const uint32_t *)p);
+               unsigned long flags = *(const PackedLE32 *)p;
                p += 4;
                remaining -= 4;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/tag/Id3Picture.cxx 
new/mpd-0.23.7/src/tag/Id3Picture.cxx
--- old/mpd-0.23.6/src/tag/Id3Picture.cxx       2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/tag/Id3Picture.cxx       2022-05-09 23:04:30.000000000 
+0200
@@ -32,7 +32,7 @@
        if (src.size < 4)
                return nullptr;
 
-       const size_t length = FromBE32(*(const uint32_t *)src.data);
+       const size_t length = *(const PackedBE32 *)src.data;
        src.skip_front(4);
 
        if (src.size < length)
@@ -65,7 +65,7 @@
 
        buffer.skip_front(16);
 
-       const size_t image_size = FromBE32(*(const uint32_t *)buffer.data);
+       const size_t image_size = *(const PackedBE32 *)buffer.data;
        buffer.skip_front(4);
 
        if (buffer.size < image_size)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/src/util/ByteOrder.hxx 
new/mpd-0.23.7/src/util/ByteOrder.hxx
--- old/mpd-0.23.6/src/util/ByteOrder.hxx       2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/src/util/ByteOrder.hxx       2022-05-09 23:04:30.000000000 
+0200
@@ -298,6 +298,60 @@
 static_assert(alignof(PackedBE16) == 1, "Wrong alignment");
 
 /**
+ * A packed big-endian 32 bit integer.
+ */
+class PackedBE32 {
+       uint8_t a, b, c, d;
+
+public:
+       PackedBE32() = default;
+
+       constexpr PackedBE32(uint32_t src) noexcept
+               :a(uint8_t(src >> 24)),
+                b(uint8_t(src >> 16)),
+                c(uint8_t(src >> 8)),
+                d(uint8_t(src)) {}
+
+       /**
+        * Construct an instance from an integer which is already
+        * big-endian.
+        */
+       static constexpr auto FromBE(uint32_t src) noexcept {
+               union {
+                       uint32_t in;
+                       PackedBE32 out;
+               } u{src};
+               return u.out;
+       }
+
+       constexpr operator uint32_t() const noexcept {
+               return (uint32_t(a) << 24) | (uint32_t(b) << 16) |
+                       (uint32_t(c) << 8) | uint32_t(d);
+       }
+
+       PackedBE32 &operator=(uint32_t new_value) noexcept {
+               d = uint8_t(new_value);
+               c = uint8_t(new_value >> 8);
+               b = uint8_t(new_value >> 16);
+               a = uint8_t(new_value >> 24);
+               return *this;
+       }
+
+       /**
+        * Reads the raw, big-endian value.
+        */
+       constexpr uint32_t raw() const noexcept {
+               uint32_t x = *this;
+               if (IsLittleEndian())
+                       x = ByteSwap32(x);
+               return x;
+       }
+};
+
+static_assert(sizeof(PackedBE32) == sizeof(uint32_t), "Wrong size");
+static_assert(alignof(PackedBE32) == 1, "Wrong alignment");
+
+/**
  * A packed little-endian 16 bit integer.
  */
 class PackedLE16 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/subprojects/expat.wrap 
new/mpd-0.23.7/subprojects/expat.wrap
--- old/mpd-0.23.6/subprojects/expat.wrap       2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/subprojects/expat.wrap       2022-05-09 23:04:30.000000000 
+0200
@@ -1,9 +1,12 @@
-[wrap-file]
-directory = expat-2.2.9
-source_url = 
https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.xz
-source_filename = expat-2.2.9.tar.bz2
-source_hash = 1ea6965b15c2106b6bbe883397271c80dfa0331cdf821b2c319591b55eadc0a4
-patch_url = https://wrapdb.mesonbuild.com/v1/projects/expat/2.2.9/3/get_zip
-patch_filename = expat-2.2.9-3-wrap.zip
-patch_hash = e9aaace62e9a158b5e96f5c38c9f81f369179206acd87697653d777c0d3975d3
-
+[wrap-file]
+directory = expat-2.4.8
+source_url = 
https://github.com/libexpat/libexpat/releases/download/R_2_4_8/expat-2.4.8.tar.xz
+source_filename = expat-2.4.8.tar.bz2
+source_hash = f79b8f904b749e3e0d20afeadecf8249c55b2e32d4ebb089ae378df479dcaf25
+patch_filename = expat_2.4.8-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/expat_2.4.8-1/get_patch
+patch_hash = 9aec253a2c6d1c0feb852c5c6920298d14701eeec7acc6832bb402438b52112a
+
+[provide]
+expat = expat_dep
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/subprojects/fmt.wrap 
new/mpd-0.23.7/subprojects/fmt.wrap
--- old/mpd-0.23.6/subprojects/fmt.wrap 2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/subprojects/fmt.wrap 2022-05-09 23:04:30.000000000 +0200
@@ -1,11 +1,11 @@
 [wrap-file]
-directory = fmt-7.1.3
-source_url = https://github.com/fmtlib/fmt/archive/7.1.3.tar.gz
-source_filename = fmt-7.1.3.tar.gz
-source_hash = 5cae7072042b3043e12d53d50ef404bbb76949dad1de368d7f993a15c8c05ecc
-patch_url = https://wrapdb.mesonbuild.com/v1/projects/fmt/7.1.3/1/get_zip
-patch_filename = fmt-7.1.3-1-wrap.zip
-patch_hash = 6eb951a51806fd6ffd596064825c39b844c1fe1799840ef507b61a53dba08213
+directory = fmt-8.1.1
+source_url = https://github.com/fmtlib/fmt/archive/8.1.1.tar.gz
+source_filename = fmt-8.1.1.tar.gz
+source_hash = 3d794d3cf67633b34b2771eb9f073bde87e846e0d395d254df7b211ef1ec7346
+patch_filename = fmt_8.1.1-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/fmt_8.1.1-1/get_patch
+patch_hash = 6035a67c7a8c90bed74c293c7265c769f47a69816125f7566bccb8e2543cee5e
 
 [provide]
 fmt = fmt_dep
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/subprojects/gtest.wrap 
new/mpd-0.23.7/subprojects/gtest.wrap
--- old/mpd-0.23.6/subprojects/gtest.wrap       2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/subprojects/gtest.wrap       2022-05-09 23:04:30.000000000 
+0200
@@ -1,10 +1,15 @@
 [wrap-file]
-directory = googletest-release-1.10.0
+directory = googletest-release-1.11.0
+source_url = https://github.com/google/googletest/archive/release-1.11.0.tar.gz
+source_filename = gtest-1.11.0.tar.gz
+source_hash = b4870bf121ff7795ba20d20bcdd8627b8e088f2d1dab299a031c1034eddc93d5
+patch_filename = gtest_1.11.0-2_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/gtest_1.11.0-2/get_patch
+patch_hash = 764530d812ac161c9eab02a8cfaec67c871fcfc5548e29fd3d488070913d4e94
 
-source_url = https://github.com/google/googletest/archive/release-1.10.0.zip
-source_filename = gtest-1.10.0.zip
-source_hash = 94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91
+[provide]
+gtest = gtest_dep
+gtest_main = gtest_main_dep
+gmock = gmock_dep
+gmock_main = gmock_main_dep
 
-patch_url = https://wrapdb.mesonbuild.com/v1/projects/gtest/1.10.0/1/get_zip
-patch_filename = gtest-1.10.0-1-wrap.zip
-patch_hash = 04ff14e8880e4e465f6260221e9dfd56fea6bc7cce4c4aff0dc528e4a2c8f514
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/subprojects/sqlite3.wrap 
new/mpd-0.23.7/subprojects/sqlite3.wrap
--- old/mpd-0.23.6/subprojects/sqlite3.wrap     2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/subprojects/sqlite3.wrap     2022-05-09 23:04:30.000000000 
+0200
@@ -1,11 +1,11 @@
 [wrap-file]
-directory = sqlite-amalgamation-3340100
-source_url = https://www.sqlite.org/2021/sqlite-amalgamation-3340100.zip
-source_filename = sqlite-amalgamation-3340100.zip
-source_hash = e0b1c0345fe4338b936e17da8e1bd88366cd210e576834546977f040c12a8f68
-patch_url = https://wrapdb.mesonbuild.com/v1/projects/sqlite3/3.34.1/1/get_zip
-patch_filename = sqlite3-3.34.1-1-wrap.zip
-patch_hash = cba9e47bdb4c02f88fadaae8deab357218d32562c6b86ce7ba0c72f107044360
+directory = sqlite-amalgamation-3380000
+source_url = https://sqlite.org/2022/sqlite-amalgamation-3380000.zip
+source_filename = sqlite-amalgamation-3380000.zip
+source_hash = e055f6054e97747a135c89e36520c0a423249e8a91c5fc445163f4a6adb20df6
+patch_filename = sqlite3_3.38.0-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/sqlite3_3.38.0-1/get_patch
+patch_hash = 49e30bf010ff63ab772d5417885e6905379025ceac80382e292c6dbd3a9da744
 
 [provide]
 sqlite3 = sqlite3_dep
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/subprojects/vorbis.wrap 
new/mpd-0.23.7/subprojects/vorbis.wrap
--- old/mpd-0.23.6/subprojects/vorbis.wrap      2022-03-14 18:55:47.000000000 
+0100
+++ new/mpd-0.23.7/subprojects/vorbis.wrap      2022-05-09 23:04:30.000000000 
+0200
@@ -1,11 +1,11 @@
 [wrap-file]
-directory = libvorbis-1.3.5
-source_url = http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.xz
-source_filename = libvorbis-1.3.5.tar.xz
-source_hash = 54f94a9527ff0a88477be0a71c0bab09a4c3febe0ed878b24824906cd4b0e1d1
-patch_url = https://wrapdb.mesonbuild.com/v1/projects/vorbis/1.3.5/7/get_zip
-patch_filename = vorbis-1.3.5-7-wrap.zip
-patch_hash = 7f4d3f9253925196461d52fd4553aad4468fd845560d1ff6c2eb6a012cf64fb0
+directory = libvorbis-1.3.7
+source_url = https://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz
+source_filename = libvorbis-1.3.7.tar.xz
+source_hash = b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b
+patch_filename = vorbis_1.3.7-2_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/vorbis_1.3.7-2/get_patch
+patch_hash = fe302576cbf8408754b332b539ea1b83f0f96fa9aae50a5d1fea911713d5f21c
 
 [provide]
 vorbis = vorbis_dep
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/test/DumpOgg.cxx 
new/mpd-0.23.7/test/DumpOgg.cxx
--- old/mpd-0.23.6/test/DumpOgg.cxx     1970-01-01 01:00:00.000000000 +0100
+++ new/mpd-0.23.7/test/DumpOgg.cxx     2022-05-09 23:04:30.000000000 +0200
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2003-2022 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "lib/xiph/OggSyncState.hxx"
+#include "lib/xiph/OggStreamState.hxx"
+#include "config/Data.hxx"
+#include "input/Init.hxx"
+#include "input/InputStream.hxx"
+#include "input/Reader.hxx"
+#include "event/Thread.hxx"
+#include "util/PrintException.hxx"
+
+#include <inttypes.h>
+#include <stdio.h>
+
+int
+main(int argc, char **argv) noexcept
+try {
+       if (argc != 2) {
+               fprintf(stderr, "Usage: DumpOgg FILE\n");
+               return EXIT_FAILURE;
+       }
+
+       const char *path = argv[1];
+
+       EventThread io_thread;
+       io_thread.Start();
+
+       const ScopeInputPluginsInit input_plugins_init(ConfigData(),
+                                                      
io_thread.GetEventLoop());
+
+       Mutex mutex;
+       auto is = InputStream::OpenReady(path, mutex);
+
+       InputStreamReader reader{*is};
+
+       OggSyncState sync{reader};
+
+       while (true) {
+               ogg_page page;
+               if (!sync.ExpectPage(page))
+                       break;
+
+               printf("page offset=%" PRIu64 " serial=%d\n",
+                      sync.GetStartOffset(), ogg_page_serialno(&page));
+       }
+
+       return EXIT_SUCCESS;
+} catch (...) {
+       PrintException(std::current_exception());
+       return EXIT_FAILURE;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.23.6/test/meson.build 
new/mpd-0.23.7/test/meson.build
--- old/mpd-0.23.6/test/meson.build     2022-03-14 18:55:47.000000000 +0100
+++ new/mpd-0.23.7/test/meson.build     2022-05-09 23:04:30.000000000 +0200
@@ -490,6 +490,19 @@
     ],
   )
 endif
+
+if ogg_dep.found()
+  executable(
+    'DumpOgg',
+    'DumpOgg.cxx',
+    include_directories: inc,
+    dependencies: [
+      ogg_dep,
+      input_glue_dep,
+      archive_glue_dep,
+    ],
+  )
+endif
   
 #
 # Filter
@@ -559,7 +572,7 @@
 # Encoder
 #
 
-if encoder_glue_dep.found()
+if need_encoder
   executable(
     'run_encoder',
     'run_encoder.cxx',

Reply via email to