From 52ee132d92d4a04d31bbbdeb7c6c0077bd2a2828 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 5 Sep 2013 19:11:50 +0200 Subject: TagHandler: use a TagBuilder internally Reduce heap allocator overhead. --- src/decoder/FlacMetadata.cxx | 5 ++++- src/decoder/OpusDecoderPlugin.cxx | 11 +++++++---- src/decoder/VorbisComments.cxx | 15 ++++++--------- 3 files changed, 17 insertions(+), 14 deletions(-) (limited to 'src/decoder') diff --git a/src/decoder/FlacMetadata.cxx b/src/decoder/FlacMetadata.cxx index a27fec5d2..49e4851e8 100644 --- a/src/decoder/FlacMetadata.cxx +++ b/src/decoder/FlacMetadata.cxx @@ -23,6 +23,7 @@ #include "tag/Tag.hxx" #include "tag/TagHandler.hxx" #include "tag/TagTable.hxx" +#include "tag/TagBuilder.hxx" #include "replay_gain_info.h" #include @@ -231,7 +232,9 @@ void flac_vorbis_comments_to_tag(Tag &tag, const FLAC__StreamMetadata_VorbisComment *comment) { - flac_scan_comments(comment, &add_tag_handler, &tag); + TagBuilder tag_builder; + flac_scan_comments(comment, &add_tag_handler, &tag_builder); + tag_builder.Commit(tag); } void diff --git a/src/decoder/OpusDecoderPlugin.cxx b/src/decoder/OpusDecoderPlugin.cxx index 9d852102b..c757d66ef 100644 --- a/src/decoder/OpusDecoderPlugin.cxx +++ b/src/decoder/OpusDecoderPlugin.cxx @@ -28,6 +28,7 @@ #include "OggCodec.hxx" #include "CheckAudioFormat.hxx" #include "tag/TagHandler.hxx" +#include "tag/TagBuilder.hxx" #include "InputStream.hxx" #include "util/Error.hxx" @@ -222,14 +223,16 @@ MPDOpusDecoder::HandleBOS(const ogg_packet &packet) inline enum decoder_command MPDOpusDecoder::HandleTags(const ogg_packet &packet) { - Tag tag; + TagBuilder tag_builder; enum decoder_command cmd; if (ScanOpusTags(packet.packet, packet.bytes, - &add_tag_handler, &tag) && - !tag.IsEmpty()) + &add_tag_handler, &tag_builder) && + !tag_builder.IsEmpty()) { + Tag tag; + tag_builder.Commit(tag); cmd = decoder_tag(decoder, input_stream, std::move(tag)); - else + } else cmd = decoder_get_command(decoder); return cmd; diff --git a/src/decoder/VorbisComments.cxx b/src/decoder/VorbisComments.cxx index 48c603ea4..c8eeb09cd 100644 --- a/src/decoder/VorbisComments.cxx +++ b/src/decoder/VorbisComments.cxx @@ -23,6 +23,7 @@ #include "tag/Tag.hxx" #include "tag/TagTable.hxx" #include "tag/TagHandler.hxx" +#include "tag/TagBuilder.hxx" #include "replay_gain_info.h" #include @@ -138,13 +139,9 @@ vorbis_comments_scan(char **comments, Tag * vorbis_comments_to_tag(char **comments) { - Tag *tag = new Tag(); - vorbis_comments_scan(comments, &add_tag_handler, tag); - - if (tag->IsEmpty()) { - delete tag; - tag = NULL; - } - - return tag; + TagBuilder tag_builder; + vorbis_comments_scan(comments, &add_tag_handler, &tag_builder); + return tag_builder.IsEmpty() + ? nullptr + : tag_builder.Commit(); } -- cgit v1.2.3