Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
57a71c157d | ||
![]() |
cc76aeb7bb | ||
![]() |
811cabf8a9 | ||
![]() |
bf8d2f93d2 | ||
![]() |
07d8259ad6 | ||
![]() |
a00d412008 | ||
![]() |
5fb39658f1 | ||
![]() |
b0703b92c3 | ||
![]() |
dd9fd3d8a7 | ||
![]() |
cf0c59864f | ||
![]() |
4c0404c70d | ||
![]() |
573a413ee1 | ||
![]() |
f633e6ca49 | ||
![]() |
07b06d76be | ||
![]() |
856fe2da15 | ||
![]() |
f82aae65cd | ||
![]() |
3fbd11a104 | ||
![]() |
58a99f1907 |
AUTHORSMakefile.amNEWS
android
configure.acdoc
python/build
src
decoder
plugins
mixer
output
player
tag
util
win32
1
AUTHORS
1
AUTHORS
@@ -30,3 +30,4 @@ The following people have contributed code to MPD:
|
||||
Jurgen Kramer <gtmkramer@xs4all.nl>
|
||||
Jean-Francois Dockes <jf@dockes.org>
|
||||
Yue Wang <yuleopen@gmail.com>
|
||||
Matthew Leon Grinshpun <ml@matthewleon.com>
|
||||
|
@@ -923,6 +923,7 @@ libtag_a_SOURCES =\
|
||||
src/tag/ReplayGain.cxx src/tag/ReplayGain.hxx \
|
||||
src/tag/MixRamp.cxx src/tag/MixRamp.hxx \
|
||||
src/tag/Generic.cxx src/tag/Generic.hxx \
|
||||
src/tag/Id3MusicBrainz.cxx src/tag/Id3MusicBrainz.hxx \
|
||||
src/tag/ApeLoader.cxx src/tag/ApeLoader.hxx \
|
||||
src/tag/ApeReplayGain.cxx src/tag/ApeReplayGain.hxx \
|
||||
src/tag/ApeTag.cxx src/tag/ApeTag.hxx
|
||||
@@ -1489,6 +1490,8 @@ liboutput_plugins_a_SOURCES += \
|
||||
src/output/plugins/OSXOutputPlugin.cxx \
|
||||
src/output/plugins/OSXOutputPlugin.hxx
|
||||
endif
|
||||
libmixer_plugins_a_SOURCES += \
|
||||
src/mixer/plugins/OSXMixerPlugin.cxx
|
||||
|
||||
if ENABLE_PULSE
|
||||
liboutput_plugins_a_SOURCES += \
|
||||
|
10
NEWS
10
NEWS
@@ -1,3 +1,13 @@
|
||||
ver 0.20.10 (2017/08/24)
|
||||
* decoder
|
||||
- ffmpeg: support MusicBrainz ID3v2 tags
|
||||
* tags
|
||||
- aiff: fix FORM chunk size endianess (is big-endian)
|
||||
* mixer
|
||||
- osx: add a mixer for OSX.
|
||||
* fix crash when resuming playback before decoder is ready
|
||||
* fix crash on Windows
|
||||
|
||||
ver 0.20.9 (2017/06/04)
|
||||
* decoder
|
||||
- ffmpeg: support *.adx
|
||||
|
@@ -154,5 +154,9 @@ configure = [
|
||||
|
||||
] + configure_args
|
||||
|
||||
from build.cmdline import concatenate_cmdline_variables
|
||||
configure = concatenate_cmdline_variables(configure,
|
||||
set(('CFLAGS', 'CXXFLAGS', 'CPPFLAGS', 'LDFLAGS', 'LIBS')))
|
||||
|
||||
subprocess.check_call(configure, env=toolchain.env)
|
||||
subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'], env=toolchain.env)
|
||||
|
@@ -1,10 +1,10 @@
|
||||
AC_PREREQ(2.60)
|
||||
|
||||
AC_INIT(mpd, 0.20.9, musicpd-dev-team@lists.sourceforge.net)
|
||||
AC_INIT(mpd, 0.20.10, musicpd-dev-team@lists.sourceforge.net)
|
||||
|
||||
VERSION_MAJOR=0
|
||||
VERSION_MINOR=20
|
||||
VERSION_REVISION=9
|
||||
VERSION_REVISION=10
|
||||
VERSION_EXTRA=0
|
||||
|
||||
AC_CONFIG_SRCDIR([src/Main.cxx])
|
||||
|
@@ -403,6 +403,15 @@
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Change events accumulate, even while the connection is
|
||||
not in "idle" mode; no events gets lost while the client
|
||||
is doing something else with the connection. If an
|
||||
event had already occurred since the last call, the new
|
||||
<command>idle</command> command will return immediately.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
While a client is waiting for <command>idle</command>
|
||||
results, the server disables timeouts, allowing a client
|
||||
|
@@ -113,7 +113,7 @@ cd mpd-version</programlisting>
|
||||
|
||||
<para>
|
||||
For example, the following installs a fairly complete list of
|
||||
build dependencies on Debian Wheezy:
|
||||
build dependencies on Debian Jessie:
|
||||
</para>
|
||||
|
||||
<programlisting>
|
||||
@@ -125,19 +125,20 @@ apt-get install g++ \
|
||||
libmpcdec-dev libwavpack-dev libwildmidi-dev \
|
||||
libsidplay2-dev libsidutils-dev libresid-builder-dev \
|
||||
libavcodec-dev libavformat-dev \
|
||||
libmp3lame-dev \
|
||||
libmp3lame-dev libtwolame-dev libshine-dev \
|
||||
libsamplerate0-dev libsoxr-dev \
|
||||
libbz2-dev libcdio-paranoia-dev libiso9660-dev libmms-dev \
|
||||
libzzip-dev \
|
||||
libcurl4-gnutls-dev libyajl-dev libexpat-dev \
|
||||
libasound2-dev libao-dev libjack-jackd2-dev libopenal-dev \
|
||||
libpulse-dev libroar-dev libshout3-dev \
|
||||
libsndio-dev \
|
||||
libmpdclient-dev \
|
||||
libnfs-dev libsmbclient-dev \
|
||||
libupnp-dev \
|
||||
libavahi-client-dev \
|
||||
libsqlite3-dev \
|
||||
libsystemd-daemon-dev libwrap0-dev \
|
||||
libsystemd-dev libwrap0-dev \
|
||||
libcppunit-dev xmlto \
|
||||
libboost-dev \
|
||||
libicu-dev
|
||||
|
29
python/build/cmdline.py
Normal file
29
python/build/cmdline.py
Normal file
@@ -0,0 +1,29 @@
|
||||
def concatenate_cmdline_variables(src, names):
|
||||
"""Find duplicate variable declarations on the given source list, and
|
||||
concatenate the values of those in the 'names' list."""
|
||||
|
||||
# the result list being constructed
|
||||
dest = []
|
||||
|
||||
# a map of variable name to destination list index
|
||||
positions = {}
|
||||
|
||||
for item in src:
|
||||
i = item.find('=')
|
||||
if i > 0:
|
||||
# it's a variable
|
||||
name = item[:i]
|
||||
if name in names:
|
||||
# it's a known variable
|
||||
if name in positions:
|
||||
# already specified: concatenate instead of
|
||||
# appending it
|
||||
dest[positions[name]] += ' ' + item[i + 1:]
|
||||
continue
|
||||
else:
|
||||
# not yet seen: append it and remember the list
|
||||
# index
|
||||
positions[name] = len(dest)
|
||||
dest.append(item)
|
||||
|
||||
return dest
|
@@ -19,8 +19,8 @@ libvorbis = AutotoolsProject(
|
||||
)
|
||||
|
||||
opus = AutotoolsProject(
|
||||
'http://downloads.xiph.org/releases/opus/opus-1.1.4.tar.gz',
|
||||
'9122b6b380081dd2665189f97bfd777f04f92dc3ab6698eea1dbb27ad59d8692',
|
||||
'https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz',
|
||||
'cfafd339ccd9c5ef8d6ab15d7e1a412c054bf4cb4ecbbbcc78c12ef2def70732',
|
||||
'lib/libopus.a',
|
||||
['--disable-shared', '--enable-static'],
|
||||
)
|
||||
@@ -57,9 +57,20 @@ libmad = AutotoolsProject(
|
||||
autogen=True,
|
||||
)
|
||||
|
||||
liblame = AutotoolsProject(
|
||||
'http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz',
|
||||
'24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff',
|
||||
'lib/libmp3lame.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
'--disable-gtktest', '--disable-analyzer-hooks',
|
||||
'--disable-decoder', '--disable-frontend',
|
||||
],
|
||||
)
|
||||
|
||||
ffmpeg = FfmpegProject(
|
||||
'http://ffmpeg.org/releases/ffmpeg-3.3.1.tar.xz',
|
||||
'b702a7fc656ac23e276b8c823a2f646e4e6f6309bb2788435a708e69bea98f2f',
|
||||
'http://ffmpeg.org/releases/ffmpeg-3.3.3.tar.xz',
|
||||
'd2a9002cdc6b533b59728827186c044ad02ba64841f1b7cd6c21779875453a1e',
|
||||
'lib/libavcodec.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
@@ -82,8 +93,8 @@ ffmpeg = FfmpegProject(
|
||||
)
|
||||
|
||||
curl = AutotoolsProject(
|
||||
'http://curl.haxx.se/download/curl-7.54.0.tar.lzma',
|
||||
'cd6aa6039f13e0b06e0a93e1b93754f6dc07f444812bb6c32be75a8f28c4070a',
|
||||
'http://curl.haxx.se/download/curl-7.55.1.tar.xz',
|
||||
'3eafca6e84ecb4af5f35795dee84e643d5428287e88c041122bb8dac18676bb7',
|
||||
'lib/libcurl.a',
|
||||
[
|
||||
'--disable-shared', '--enable-static',
|
||||
@@ -103,7 +114,7 @@ curl = AutotoolsProject(
|
||||
)
|
||||
|
||||
boost = BoostProject(
|
||||
'http://downloads.sourceforge.net/project/boost/boost/1.64.0/boost_1_64_0.tar.bz2',
|
||||
'7bcc5caace97baa948931d712ea5f37038dbb1c5d89b43ad4def4ed7cb683332',
|
||||
'http://downloads.sourceforge.net/project/boost/boost/1.65.0/boost_1_65_0.tar.bz2',
|
||||
'ea26712742e2fb079c2a566a31f3266973b76e38222b9f88b387e3c8b2f9902c',
|
||||
'include/boost/version.hpp',
|
||||
)
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "FfmpegMetaData.hxx"
|
||||
#include "tag/TagTable.hxx"
|
||||
#include "tag/TagHandler.hxx"
|
||||
#include "tag/Id3MusicBrainz.hxx"
|
||||
|
||||
extern "C" {
|
||||
#include <libavutil/dict.h>
|
||||
@@ -75,6 +76,11 @@ FfmpegScanDictionary(AVDictionary *dict,
|
||||
i->name != nullptr; ++i)
|
||||
FfmpegScanTag(i->type, dict, i->name,
|
||||
handler, handler_ctx);
|
||||
|
||||
for (const struct tag_table *i = musicbrainz_txxx_tags;
|
||||
i->name != nullptr; ++i)
|
||||
FfmpegScanTag(i->type, dict, i->name,
|
||||
handler, handler_ctx);
|
||||
}
|
||||
|
||||
if (handler.pair != nullptr)
|
||||
|
@@ -32,6 +32,7 @@ extern const MixerPlugin software_mixer_plugin;
|
||||
extern const MixerPlugin alsa_mixer_plugin;
|
||||
extern const MixerPlugin haiku_mixer_plugin;
|
||||
extern const MixerPlugin oss_mixer_plugin;
|
||||
extern const MixerPlugin osx_mixer_plugin;
|
||||
extern const MixerPlugin roar_mixer_plugin;
|
||||
extern const MixerPlugin pulse_mixer_plugin;
|
||||
extern const MixerPlugin winmm_mixer_plugin;
|
||||
|
69
src/mixer/plugins/OSXMixerPlugin.cxx
Normal file
69
src/mixer/plugins/OSXMixerPlugin.cxx
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright 2003-2017 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 "config.h"
|
||||
#include "mixer/MixerInternal.hxx"
|
||||
#include "output/plugins/OSXOutputPlugin.hxx"
|
||||
|
||||
class OSXMixer final : public Mixer {
|
||||
OSXOutput &output;
|
||||
|
||||
public:
|
||||
OSXMixer(OSXOutput &_output, MixerListener &_listener)
|
||||
:Mixer(osx_mixer_plugin, _listener),
|
||||
output(_output)
|
||||
{
|
||||
}
|
||||
|
||||
/* virtual methods from class Mixer */
|
||||
void Open() override {
|
||||
}
|
||||
|
||||
void Close() override {
|
||||
}
|
||||
|
||||
int GetVolume() override;
|
||||
void SetVolume(unsigned volume) override;
|
||||
};
|
||||
|
||||
int
|
||||
OSXMixer::GetVolume()
|
||||
{
|
||||
return osx_output_get_volume(output);
|
||||
}
|
||||
|
||||
void
|
||||
OSXMixer::SetVolume(unsigned new_volume)
|
||||
{
|
||||
osx_output_set_volume(output, new_volume);
|
||||
}
|
||||
|
||||
static Mixer *
|
||||
osx_mixer_init(gcc_unused EventLoop &event_loop, AudioOutput &ao,
|
||||
MixerListener &listener,
|
||||
gcc_unused const ConfigBlock &block)
|
||||
{
|
||||
OSXOutput &osxo = (OSXOutput &)ao;
|
||||
return new OSXMixer(osxo, listener);
|
||||
}
|
||||
|
||||
const MixerPlugin osx_mixer_plugin = {
|
||||
osx_mixer_init,
|
||||
true,
|
||||
};
|
@@ -20,6 +20,7 @@
|
||||
#include "config.h"
|
||||
#include "OSXOutputPlugin.hxx"
|
||||
#include "../OutputAPI.hxx"
|
||||
#include "mixer/MixerList.hxx"
|
||||
#include "util/ScopeExit.hxx"
|
||||
#include "util/RuntimeError.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
@@ -53,6 +54,9 @@ struct OSXOutput {
|
||||
boost::lockfree::spsc_queue<uint8_t> *ring_buffer;
|
||||
|
||||
OSXOutput(const ConfigBlock &block);
|
||||
|
||||
int GetVolume();
|
||||
void SetVolume(unsigned new_volume);
|
||||
};
|
||||
|
||||
static constexpr Domain osx_output_domain("osx_output");
|
||||
@@ -103,6 +107,44 @@ OSXOutput::OSXOutput(const ConfigBlock &block)
|
||||
sync_sample_rate = block.GetBlockValue("sync_sample_rate", false);
|
||||
}
|
||||
|
||||
int
|
||||
OSXOutput::GetVolume()
|
||||
{
|
||||
AudioUnitParameterValue dvolume;
|
||||
char errormsg[1024];
|
||||
|
||||
OSStatus status = AudioUnitGetParameter(au, kHALOutputParam_Volume,
|
||||
kAudioUnitScope_Global, 0, &dvolume);
|
||||
if (status != noErr) {
|
||||
osx_os_status_to_cstring(status, errormsg, sizeof(errormsg));
|
||||
throw FormatRuntimeError("unable to get volume: %s", errormsg);
|
||||
}
|
||||
|
||||
/* see the explanation in SetVolume, below */
|
||||
return static_cast<int>(dvolume * dvolume * 100.0);
|
||||
}
|
||||
|
||||
void
|
||||
OSXOutput::SetVolume(unsigned new_volume) {
|
||||
char errormsg[1024];
|
||||
|
||||
/* The scaling below makes shifts in volume greater at the lower end
|
||||
* of the scale. This mimics the "feel" of physical volume levers. This is
|
||||
* generally what users of audio software expect.
|
||||
*/
|
||||
|
||||
AudioUnitParameterValue scaled_volume =
|
||||
sqrt(static_cast<AudioUnitParameterValue>(new_volume) / 100.0);
|
||||
|
||||
OSStatus status = AudioUnitSetParameter(au, kHALOutputParam_Volume,
|
||||
kAudioUnitScope_Global, 0, scaled_volume, 0);
|
||||
if (status != noErr) {
|
||||
osx_os_status_to_cstring(status, errormsg, sizeof(errormsg));
|
||||
throw FormatRuntimeError( "unable to set new volume %u: %s",
|
||||
new_volume, errormsg);
|
||||
}
|
||||
}
|
||||
|
||||
static AudioOutput *
|
||||
osx_output_init(const ConfigBlock &block)
|
||||
{
|
||||
@@ -678,6 +720,18 @@ osx_output_delay(AudioOutput *ao) noexcept
|
||||
: std::chrono::milliseconds(25);
|
||||
}
|
||||
|
||||
int
|
||||
osx_output_get_volume(OSXOutput &output)
|
||||
{
|
||||
return output.GetVolume();
|
||||
}
|
||||
|
||||
void
|
||||
osx_output_set_volume(OSXOutput &output, unsigned new_volume)
|
||||
{
|
||||
return output.SetVolume(new_volume);
|
||||
}
|
||||
|
||||
const struct AudioOutputPlugin osx_output_plugin = {
|
||||
"osx",
|
||||
osx_output_test_default_device,
|
||||
@@ -693,5 +747,6 @@ const struct AudioOutputPlugin osx_output_plugin = {
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
|
||||
&osx_mixer_plugin,
|
||||
};
|
||||
|
@@ -20,6 +20,14 @@
|
||||
#ifndef MPD_OSX_OUTPUT_PLUGIN_HXX
|
||||
#define MPD_OSX_OUTPUT_PLUGIN_HXX
|
||||
|
||||
struct OSXOutput;
|
||||
|
||||
extern const struct AudioOutputPlugin osx_output_plugin;
|
||||
|
||||
int
|
||||
osx_output_get_volume(OSXOutput &output);
|
||||
|
||||
void
|
||||
osx_output_set_volume(OSXOutput &output, unsigned new_volume);
|
||||
|
||||
#endif
|
||||
|
@@ -135,7 +135,7 @@ class Player {
|
||||
/**
|
||||
* The current audio format for the audio outputs.
|
||||
*/
|
||||
AudioFormat play_audio_format;
|
||||
AudioFormat play_audio_format = AudioFormat::Undefined();
|
||||
|
||||
/**
|
||||
* The time stamp of the chunk most recently sent to the
|
||||
|
@@ -49,7 +49,7 @@ aiff_seek_id3(InputStream &is)
|
||||
aiff_header header;
|
||||
is.ReadFull(&header, sizeof(header));
|
||||
if (memcmp(header.id, "FORM", 4) != 0 ||
|
||||
(is.KnownSize() && FromLE32(header.size) > is.GetSize()) ||
|
||||
(is.KnownSize() && FromBE32(header.size) > is.GetSize()) ||
|
||||
(memcmp(header.format, "AIFF", 4) != 0 &&
|
||||
memcmp(header.format, "AIFC", 4) != 0))
|
||||
throw std::runtime_error("Not an AIFF file");
|
||||
|
34
src/tag/Id3MusicBrainz.cxx
Normal file
34
src/tag/Id3MusicBrainz.cxx
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright 2003-2017 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 "Id3MusicBrainz.hxx"
|
||||
#include "TagTable.hxx"
|
||||
#include "TagType.h"
|
||||
|
||||
const struct tag_table musicbrainz_txxx_tags[] = {
|
||||
{ "ALBUMARTISTSORT", TAG_ALBUM_ARTIST_SORT },
|
||||
{ "MusicBrainz Artist Id", TAG_MUSICBRAINZ_ARTISTID },
|
||||
{ "MusicBrainz Album Id", TAG_MUSICBRAINZ_ALBUMID },
|
||||
{ "MusicBrainz Album Artist Id",
|
||||
TAG_MUSICBRAINZ_ALBUMARTISTID },
|
||||
{ "MusicBrainz Track Id", TAG_MUSICBRAINZ_TRACKID },
|
||||
{ "MusicBrainz Release Track Id",
|
||||
TAG_MUSICBRAINZ_RELEASETRACKID },
|
||||
{ nullptr, TAG_NUM_OF_ITEM_TYPES }
|
||||
};
|
25
src/tag/Id3MusicBrainz.hxx
Normal file
25
src/tag/Id3MusicBrainz.hxx
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2003-2017 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.
|
||||
*/
|
||||
|
||||
#ifndef MPD_TAG_ID3MUSICBRAINZ_HXX
|
||||
#define MPD_TAG_ID3MUSICBRAINZ_HXX
|
||||
|
||||
extern const struct tag_table musicbrainz_txxx_tags[];
|
||||
|
||||
#endif
|
@@ -20,6 +20,7 @@
|
||||
#include "config.h"
|
||||
#include "TagId3.hxx"
|
||||
#include "Id3Load.hxx"
|
||||
#include "Id3MusicBrainz.hxx"
|
||||
#include "TagHandler.hxx"
|
||||
#include "TagTable.hxx"
|
||||
#include "TagBuilder.hxx"
|
||||
@@ -205,19 +206,8 @@ gcc_pure
|
||||
static TagType
|
||||
tag_id3_parse_txxx_name(const char *name) noexcept
|
||||
{
|
||||
static constexpr struct tag_table txxx_tags[] = {
|
||||
{ "ALBUMARTISTSORT", TAG_ALBUM_ARTIST_SORT },
|
||||
{ "MusicBrainz Artist Id", TAG_MUSICBRAINZ_ARTISTID },
|
||||
{ "MusicBrainz Album Id", TAG_MUSICBRAINZ_ALBUMID },
|
||||
{ "MusicBrainz Album Artist Id",
|
||||
TAG_MUSICBRAINZ_ALBUMARTISTID },
|
||||
{ "MusicBrainz Track Id", TAG_MUSICBRAINZ_TRACKID },
|
||||
{ "MusicBrainz Release Track Id",
|
||||
TAG_MUSICBRAINZ_RELEASETRACKID },
|
||||
{ nullptr, TAG_NUM_OF_ITEM_TYPES }
|
||||
};
|
||||
|
||||
return tag_table_lookup(txxx_tags, name);
|
||||
return tag_table_lookup(musicbrainz_txxx_tags, name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -57,7 +57,7 @@ FormatStringV(const char *fmt, va_list args)
|
||||
const size_t length = strlen(buffer);
|
||||
char *p = new char[length + 1];
|
||||
memcpy(p, buffer, length + 1);
|
||||
return AllocatedString<>::Donate(buffer);
|
||||
return AllocatedString<>::Donate(p);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -76,6 +76,7 @@ thirdparty_libs = [
|
||||
flac,
|
||||
zlib,
|
||||
libid3tag,
|
||||
liblame,
|
||||
ffmpeg,
|
||||
curl,
|
||||
boost,
|
||||
@@ -112,5 +113,9 @@ configure = [
|
||||
|
||||
] + configure_args
|
||||
|
||||
from build.cmdline import concatenate_cmdline_variables
|
||||
configure = concatenate_cmdline_variables(configure,
|
||||
set(('CFLAGS', 'CXXFLAGS', 'CPPFLAGS', 'LDFLAGS', 'LIBS')))
|
||||
|
||||
subprocess.check_call(configure, env=toolchain.env)
|
||||
subprocess.check_call(['/usr/bin/make', '--quiet', '-j12'], env=toolchain.env)
|
||||
|
Reference in New Issue
Block a user