diff --git a/src/decoder/plugins/MadDecoderPlugin.cxx b/src/decoder/plugins/MadDecoderPlugin.cxx index fe68810b3..fbf785a7e 100644 --- a/src/decoder/plugins/MadDecoderPlugin.cxx +++ b/src/decoder/plugins/MadDecoderPlugin.cxx @@ -23,6 +23,7 @@ #include "input/InputStream.hxx" #include "tag/Id3Scan.hxx" #include "tag/Id3ReplayGain.hxx" +#include "tag/Id3MixRamp.hxx" #include "tag/Handler.hxx" #include "tag/ReplayGain.hxx" #include "tag/MixRampParser.hxx" @@ -268,35 +269,6 @@ MadDecoder::FillBuffer() noexcept return true; } -#ifdef ENABLE_ID3TAG -gcc_pure -static MixRampInfo -parse_id3_mixramp(struct id3_tag *tag) noexcept -{ - MixRampInfo result; - - struct id3_frame *frame; - for (unsigned i = 0; (frame = id3_tag_findframe(tag, "TXXX", i)); i++) { - if (frame->nfields < 3) - continue; - - char *const key = (char *) - id3_ucs4_latin1duplicate(id3_field_getstring - (&frame->fields[1])); - char *const value = (char *) - id3_ucs4_latin1duplicate(id3_field_getstring - (&frame->fields[2])); - - ParseMixRampTag(result, key, value); - - free(key); - free(value); - } - - return result; -} -#endif - inline void MadDecoder::ParseId3(size_t tagsize, Tag *mpd_tag) noexcept { @@ -338,7 +310,7 @@ MadDecoder::ParseId3(size_t tagsize, Tag *mpd_tag) noexcept found_replay_gain = true; } - client->SubmitMixRamp(parse_id3_mixramp(id3_tag.get())); + client->SubmitMixRamp(Id3ToMixRampInfo(id3_tag.get())); } #else /* !ENABLE_ID3TAG */ diff --git a/src/tag/Id3MixRamp.cxx b/src/tag/Id3MixRamp.cxx new file mode 100644 index 000000000..0108ad482 --- /dev/null +++ b/src/tag/Id3MixRamp.cxx @@ -0,0 +1,52 @@ +/* + * Copyright 2003-2021 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 "Id3MixRamp.hxx" +#include "MixRampParser.hxx" +#include "MixRampInfo.hxx" + +#include + +#include + +MixRampInfo +Id3ToMixRampInfo(const struct id3_tag *tag) noexcept +{ + MixRampInfo result; + + struct id3_frame *frame; + for (unsigned i = 0; (frame = id3_tag_findframe(tag, "TXXX", i)); i++) { + if (frame->nfields < 3) + continue; + + char *const key = (char *) + id3_ucs4_latin1duplicate(id3_field_getstring + (&frame->fields[1])); + char *const value = (char *) + id3_ucs4_latin1duplicate(id3_field_getstring + (&frame->fields[2])); + + ParseMixRampTag(result, key, value); + + free(key); + free(value); + } + + return result; +} diff --git a/src/tag/Id3MixRamp.hxx b/src/tag/Id3MixRamp.hxx new file mode 100644 index 000000000..e0e1ce0da --- /dev/null +++ b/src/tag/Id3MixRamp.hxx @@ -0,0 +1,27 @@ +/* + * Copyright 2003-2021 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. + */ + +#pragma once + +struct id3_tag; +class MixRampInfo; + +[[gnu::pure]] +MixRampInfo +Id3ToMixRampInfo(const struct id3_tag *tag) noexcept; diff --git a/src/tag/meson.build b/src/tag/meson.build index 0363608b2..b8d06826a 100644 --- a/src/tag/meson.build +++ b/src/tag/meson.build @@ -43,6 +43,7 @@ if libid3tag_dep.found() tag_sources += [ 'Id3Load.cxx', 'Id3Scan.cxx', + 'Id3MixRamp.cxx', 'Id3ReplayGain.cxx', 'Rva2.cxx', 'RiffId3.cxx',