release v0.20.20
-----BEGIN PGP SIGNATURE----- iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlsD85IQHG1heEBtdXNp Y3BkLm9yZwAKCRAjbopYxttFEm5xD/oCagsybi2L60r0trtjE7DJ+SnmgbjVmn3z aieaIA78KFK2QWUettevYkVwtwqEqyw5DwSDmxRRpm9sMKsdDBL+gLCf5hjIFNQY dZjyBIABgE+aAT+iYeXVmWgJI24s8znEGhZjUG5P/gf+CoLKvN5OQiZoBKOaurjX YwJUyLV1SXiMLV/4HtOFw4xORuRPflhZ5MnA+cO7BmpV0XQoq82XgBi3XqAB8dv4 cIpDs0MU7DFHNUYHeHEWXVh1PgAcr2madWwQTiscuy8KRAR0GzkCsG5UrSyJs0xH c0yQ1vVt7X0nyxV35Yemmlfe4DwMwNK9avsTr3Mmr4tNDbxxhiddDYZzy6UJHKis vaVLhePLjXCOfPRivCY8zVZHwGTO5ArxQqftkGDnM1Gq8PwpTWLimZkvUW35d/xf SJ+ixpkA1O2DzmkyUam41phhXli+lt0hF1P/7dKsuV/fzmAkJlmRpgxJJhLH8mwq NNfHk8y8kdGoVy65e/u2asJe8PPB2y9NK2JmbBR9g6Dn+6puP4gkhok3a9cvUZ6q 5GHJF9yRYswVkr/Y6q8UtESeEUczqrQTasVvq0fkxV0f17BKDbOxClb+ItrnPTWV WMfsyF3TYrHi4piB810q/nBY6pY7R2vQNCPMZwfjGlqn5amR2fm8QWecJVIPpkv3 rEPv+4r8nQ== =DEYg -----END PGP SIGNATURE----- Merge tag 'v0.20.20' release v0.20.20
This commit is contained in:
commit
66a1e8b737
|
@ -352,7 +352,7 @@ android/build/gen/org/musicpd/R.java: android/build/resources.apk
|
|||
|
||||
android/build/classes.dex: $(JAVA_SOURCE_PATHS) android/build/gen/org/musicpd/R.java
|
||||
@$(MKDIR_P) $(JAVA_CLASSFILES_DIR)
|
||||
$(JAVAC) -source 1.5 -target 1.5 -Xlint:-options \
|
||||
$(JAVAC) -source 1.6 -target 1.6 -Xlint:-options \
|
||||
-cp $(ANDROID_SDK_PLATFORM_DIR)/android.jar:$(JAVA_CLASSFILES_DIR) \
|
||||
-d $(JAVA_CLASSFILES_DIR) $^
|
||||
$(DX) --dex --output $@ $(JAVA_CLASSFILES_DIR)
|
||||
|
|
8
NEWS
8
NEWS
|
@ -31,11 +31,17 @@ ver 0.21 (not yet released)
|
|||
- opus: support for sending metadata using ogg stream chaining
|
||||
* require GCC 5.0
|
||||
|
||||
ver 0.20.20 (not yet released)
|
||||
ver 0.20.20 (2018/05/22)
|
||||
* protocol
|
||||
- fix "modified-since" filter regression
|
||||
* output
|
||||
- pulse: cork stream when paused due to "single" mode
|
||||
* decoder
|
||||
- dsdiff, dsf: support more MIME types
|
||||
- dsdiff, dsf: allow 4 MB ID3 tags
|
||||
- opus: support R128_ALBUM_GAIN tag
|
||||
* Android, Windows
|
||||
- enable the "proxy" database plugin
|
||||
|
||||
ver 0.20.19 (2018/04/26)
|
||||
* protocol
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.musicpd"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="18"
|
||||
android:versionName="0.20.19">
|
||||
android:versionCode="19"
|
||||
android:versionName="0.20.20">
|
||||
|
||||
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17"/>
|
||||
|
||||
|
|
|
@ -138,6 +138,7 @@ class AndroidNdkToolchain:
|
|||
# a list of third-party libraries to be used by MPD on Android
|
||||
from build.libs import *
|
||||
thirdparty_libs = [
|
||||
libmpdclient,
|
||||
libogg,
|
||||
libvorbis,
|
||||
opus,
|
||||
|
|
|
@ -3,10 +3,17 @@ from os.path import abspath
|
|||
|
||||
from build.project import Project
|
||||
from build.zlib import ZlibProject
|
||||
from build.meson import MesonProject
|
||||
from build.autotools import AutotoolsProject
|
||||
from build.ffmpeg import FfmpegProject
|
||||
from build.boost import BoostProject
|
||||
|
||||
libmpdclient = MesonProject(
|
||||
'https://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.14.tar.xz',
|
||||
'0a84e2791bfe3077cf22ee1784c805d5bb550803dffe56a39aa3690a38061372',
|
||||
'lib/libmpdclient.a',
|
||||
)
|
||||
|
||||
libogg = AutotoolsProject(
|
||||
'http://downloads.xiph.org/releases/ogg/libogg-1.3.3.tar.xz',
|
||||
'4f3fc6178a533d392064f14776b23c397ed4b9f48f5de297aba73b643f955c08',
|
||||
|
@ -334,8 +341,8 @@ ffmpeg = FfmpegProject(
|
|||
)
|
||||
|
||||
curl = AutotoolsProject(
|
||||
'http://curl.haxx.se/download/curl-7.59.0.tar.xz',
|
||||
'e44eaabdf916407585bf5c7939ff1161e6242b6b015d3f2f5b758b2a330461fc',
|
||||
'http://curl.haxx.se/download/curl-7.60.0.tar.xz',
|
||||
'8736ff8ded89ddf7e926eec7b16f82597d029fc1469f3a551f1fafaac164e6a0',
|
||||
'lib/libcurl.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
import os.path, subprocess, sys
|
||||
|
||||
from build.project import Project
|
||||
|
||||
class MesonProject(Project):
|
||||
def __init__(self, url, md5, installed, configure_args=[],
|
||||
**kwargs):
|
||||
Project.__init__(self, url, md5, installed, **kwargs)
|
||||
self.configure_args = configure_args
|
||||
|
||||
def _make_cross_file(self, toolchain):
|
||||
if toolchain.is_windows:
|
||||
system = 'windows'
|
||||
else:
|
||||
system = 'linux'
|
||||
|
||||
if toolchain.is_arm:
|
||||
cpu_family = 'arm'
|
||||
if toolchain.is_armv7:
|
||||
cpu = 'armv7'
|
||||
else:
|
||||
cpu = 'armv6'
|
||||
else:
|
||||
cpu_family = 'x86'
|
||||
if 'x86_64' in toolchain.arch:
|
||||
cpu = 'x86_64'
|
||||
else:
|
||||
cpu = 'i686'
|
||||
|
||||
# TODO: support more CPUs
|
||||
endian = 'little'
|
||||
|
||||
# TODO: write pkg-config wrapper
|
||||
|
||||
path = os.path.join(toolchain.build_path, 'meson.cross')
|
||||
os.makedirs(toolchain.build_path, exist_ok=True)
|
||||
with open(path, 'w') as f:
|
||||
f.write("""
|
||||
[binaries]
|
||||
c = '%s'
|
||||
cpp = '%s'
|
||||
ar = '%s'
|
||||
strip = '%s'
|
||||
|
||||
[properties]
|
||||
root = '%s'
|
||||
|
||||
c_args = %s
|
||||
c_link_args = %s
|
||||
|
||||
cpp_args = %s
|
||||
cpp_link_args = %s
|
||||
|
||||
[host_machine]
|
||||
system = '%s'
|
||||
cpu_family = '%s'
|
||||
cpu = '%s'
|
||||
endian = '%s'
|
||||
""" % (toolchain.cc, toolchain.cxx, toolchain.ar, toolchain.strip,
|
||||
toolchain.install_prefix,
|
||||
repr((toolchain.cppflags + ' ' + toolchain.cflags).split()),
|
||||
repr(toolchain.ldflags.split()),
|
||||
repr((toolchain.cppflags + ' ' + toolchain.cxxflags).split()),
|
||||
repr(toolchain.ldflags.split()),
|
||||
system, cpu_family, cpu, endian))
|
||||
return path
|
||||
|
||||
def configure(self, toolchain):
|
||||
src = self.unpack(toolchain)
|
||||
cross_file = self._make_cross_file(toolchain)
|
||||
build = self.make_build_path(toolchain)
|
||||
configure = [
|
||||
'meson',
|
||||
src, build,
|
||||
|
||||
'--prefix', toolchain.install_prefix,
|
||||
|
||||
# this is necessary because Meson uses Debian's build machine
|
||||
# MultiArch path (e.g. "lib/x86_64-linux-gnu") for cross
|
||||
# builds, which is obviously wrong
|
||||
'--libdir', 'lib',
|
||||
|
||||
'--buildtype', 'plain',
|
||||
|
||||
'--default-library=static',
|
||||
|
||||
'--cross-file', cross_file,
|
||||
] + self.configure_args
|
||||
|
||||
subprocess.check_call(configure, env=toolchain.env)
|
||||
return build
|
||||
|
||||
def build(self, toolchain):
|
||||
build = self.configure(toolchain)
|
||||
subprocess.check_call(['ninja', 'install'],
|
||||
cwd=build, env=toolchain.env)
|
|
@ -128,7 +128,7 @@ dsdlib_tag_id3(InputStream &is,
|
|||
return;
|
||||
|
||||
const auto count64 = size - tagoffset;
|
||||
if (count64 < 10 || count64 > 1024 * 1024)
|
||||
if (count64 < 10 || count64 > 4 * 1024 * 1024)
|
||||
return;
|
||||
|
||||
if (!dsdlib_skip_to(nullptr, is, tagoffset))
|
||||
|
|
|
@ -53,6 +53,14 @@ ScanOneOpusTag(const char *name, const char *value,
|
|||
long l = strtol(value, &endptr, 10);
|
||||
if (endptr > value && *endptr == 0)
|
||||
rgi->track.gain = double(l) / 256.;
|
||||
} else if (rgi != nullptr && strcmp(name, "R128_ALBUM_GAIN") == 0) {
|
||||
/* R128_ALBUM_GAIN is a Q7.8 fixed point number in
|
||||
dB */
|
||||
|
||||
char *endptr;
|
||||
long l = strtol(value, &endptr, 10);
|
||||
if (endptr > value && *endptr == 0)
|
||||
rgi->album.gain = double(l) / 256.;
|
||||
}
|
||||
|
||||
tag_handler_invoke_pair(handler, ctx, name, value);
|
||||
|
|
|
@ -931,6 +931,7 @@ Player::SongBorder() noexcept
|
|||
if (border_pause) {
|
||||
paused = true;
|
||||
pc.listener.OnBorderPause();
|
||||
pc.outputs.Pause();
|
||||
idle_add(IDLE_PLAYER);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,6 +76,7 @@ class CrossGccToolchain:
|
|||
# a list of third-party libraries to be used by MPD on Android
|
||||
from build.libs import *
|
||||
thirdparty_libs = [
|
||||
libmpdclient,
|
||||
libogg,
|
||||
libvorbis,
|
||||
opus,
|
||||
|
|
Loading…
Reference in New Issue