From 8a7ff6a6fd70d6a8e7611ffb0f794fb3eab2a462 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 24 Sep 2014 22:44:58 +0200 Subject: decoder/flac: move code to tag/MixRamp.cxx --- src/decoder/plugins/FlacMetadata.cxx | 45 ++++++++---------------------------- src/tag/MixRamp.cxx | 16 +++++++++++++ src/tag/MixRamp.hxx | 3 +++ 3 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/decoder/plugins/FlacMetadata.cxx b/src/decoder/plugins/FlacMetadata.cxx index 4628ad4a2..f917a8fcc 100644 --- a/src/decoder/plugins/FlacMetadata.cxx +++ b/src/decoder/plugins/FlacMetadata.cxx @@ -27,32 +27,11 @@ #include "tag/Tag.hxx" #include "tag/VorbisComment.hxx" #include "tag/ReplayGain.hxx" +#include "tag/MixRamp.hxx" #include "ReplayGainInfo.hxx" #include "util/ASCII.hxx" #include "util/SplitString.hxx" -#include - -static const char * -vorbis_comment_value(const FLAC__StreamMetadata *block, - const char *name) -{ - int offset = - FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, - name); - if (offset < 0) - return nullptr; - - size_t name_length = strlen(name); - - const FLAC__StreamMetadata_VorbisComment_Entry &vc = - block->data.vorbis_comment.comments[offset]; - const char *comment = (const char *)vc.entry; - - /* 1 is for '=' */ - return comment + name_length + 1; -} - bool flac_parse_replay_gain(ReplayGainInfo &rgi, const FLAC__StreamMetadata_VorbisComment &vc) @@ -70,23 +49,19 @@ flac_parse_replay_gain(ReplayGainInfo &rgi, return found; } -gcc_pure -static std::string -flac_find_string_comment(const FLAC__StreamMetadata *block, const char *cmnt) -{ - const char *value = vorbis_comment_value(block, cmnt); - if (value == nullptr) - return std::string(); - - return std::string(value); -} - MixRampInfo flac_parse_mixramp(const FLAC__StreamMetadata *block) { + const FLAC__StreamMetadata_VorbisComment &vc = + block->data.vorbis_comment; + MixRampInfo mix_ramp; - mix_ramp.SetStart(flac_find_string_comment(block, "mixramp_start")); - mix_ramp.SetEnd(flac_find_string_comment(block, "mixramp_end")); + + const auto *comments = vc.comments; + for (FLAC__uint32 i = 0, n = vc.num_comments; i < n; ++i) + ParseMixRampVorbis(mix_ramp, + (const char *)comments[i].entry); + return mix_ramp; } diff --git a/src/tag/MixRamp.cxx b/src/tag/MixRamp.cxx index 36cf74c82..e1b6e43c5 100644 --- a/src/tag/MixRamp.cxx +++ b/src/tag/MixRamp.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "MixRamp.hxx" +#include "VorbisComment.hxx" #include "MixRampInfo.hxx" #include "util/ASCII.hxx" @@ -61,3 +62,18 @@ ParseMixRampTag(MixRampInfo &info, const char *name, const char *value) return ParseMixRampTagTemplate(info, NameValue{name, value}); } + +bool +ParseMixRampVorbis(MixRampInfo &info, const char *entry) +{ + struct VorbisCommentEntry { + const char *entry; + + gcc_pure + const char *operator[](const char *n) const { + return vorbis_comment_value(entry, n); + } + }; + + return ParseMixRampTagTemplate(info, VorbisCommentEntry{entry}); +} diff --git a/src/tag/MixRamp.hxx b/src/tag/MixRamp.hxx index 7f384153e..5b4e2dc30 100644 --- a/src/tag/MixRamp.hxx +++ b/src/tag/MixRamp.hxx @@ -27,4 +27,7 @@ class MixRampInfo; bool ParseMixRampTag(MixRampInfo &info, const char *name, const char *value); +bool +ParseMixRampVorbis(MixRampInfo &info, const char *entry); + #endif -- cgit v1.2.3