diff --git a/src/DecoderAPI.cxx b/src/DecoderAPI.cxx index c7a12c68a..a4bdf37c4 100644 --- a/src/DecoderAPI.cxx +++ b/src/DecoderAPI.cxx @@ -471,19 +471,18 @@ decoder_data(struct decoder *decoder, enum decoder_command decoder_tag(G_GNUC_UNUSED struct decoder *decoder, struct input_stream *is, - const Tag *tag) + Tag &&tag) { G_GNUC_UNUSED const struct decoder_control *dc = decoder->dc; enum decoder_command cmd; assert(dc->state == DECODE_STATE_DECODE); assert(dc->pipe != NULL); - assert(tag != NULL); /* save the tag */ delete decoder->decoder_tag; - decoder->decoder_tag = new Tag(*tag); + decoder->decoder_tag = new Tag(tag); /* check for a new stream tag */ @@ -509,7 +508,7 @@ decoder_tag(G_GNUC_UNUSED struct decoder *decoder, struct input_stream *is, delete merged; } else /* send only the decoder tag */ - cmd = do_send_tag(decoder, *tag); + cmd = do_send_tag(decoder, *decoder->decoder_tag); return cmd; } diff --git a/src/DecoderAPI.hxx b/src/DecoderAPI.hxx index d4886d062..c70365bff 100644 --- a/src/DecoderAPI.hxx +++ b/src/DecoderAPI.hxx @@ -141,8 +141,7 @@ decoder_data(struct decoder *decoder, struct input_stream *is, * command pending */ enum decoder_command -decoder_tag(struct decoder *decoder, struct input_stream *is, - const Tag *tag); +decoder_tag(struct decoder *decoder, struct input_stream *is, Tag &&tag); /** * Set replay gain values for the following chunks. diff --git a/src/decoder/FlacDecoderPlugin.cxx b/src/decoder/FlacDecoderPlugin.cxx index 3bc50aa4e..4140d14f7 100644 --- a/src/decoder/FlacDecoderPlugin.cxx +++ b/src/decoder/FlacDecoderPlugin.cxx @@ -174,7 +174,7 @@ flac_decoder_loop(struct flac_data *data, FLAC__StreamDecoder *flac_dec, while (true) { if (data->tag != nullptr && !data->tag->IsEmpty()) { cmd = decoder_tag(data->decoder, data->input_stream, - data->tag); + std::move(*data->tag)); delete data->tag; data->tag = new Tag(); } else diff --git a/src/decoder/MadDecoderPlugin.cxx b/src/decoder/MadDecoderPlugin.cxx index 9f36fd86b..b75e12343 100644 --- a/src/decoder/MadDecoderPlugin.cxx +++ b/src/decoder/MadDecoderPlugin.cxx @@ -1084,7 +1084,8 @@ MadDecoder::Read() ret = DecodeNextFrameHeader(&tag); if (tag != nullptr) { - decoder_tag(decoder, input_stream, tag); + decoder_tag(decoder, input_stream, + std::move(*tag)); delete tag; } } while (ret == DECODE_CONT); @@ -1142,7 +1143,7 @@ mp3_decode(struct decoder *decoder, struct input_stream *input_stream) data.total_time); if (tag != nullptr) { - decoder_tag(decoder, input_stream, tag); + decoder_tag(decoder, input_stream, std::move(*tag)); delete tag; } diff --git a/src/decoder/OpusDecoderPlugin.cxx b/src/decoder/OpusDecoderPlugin.cxx index 148125347..08c67b570 100644 --- a/src/decoder/OpusDecoderPlugin.cxx +++ b/src/decoder/OpusDecoderPlugin.cxx @@ -228,7 +228,7 @@ MPDOpusDecoder::HandleTags(const ogg_packet &packet) if (ScanOpusTags(packet.packet, packet.bytes, &add_tag_handler, &tag) && !tag.IsEmpty()) - cmd = decoder_tag(decoder, input_stream, &tag); + cmd = decoder_tag(decoder, input_stream, std::move(tag)); else cmd = decoder_get_command(decoder); diff --git a/src/decoder/VorbisDecoderPlugin.cxx b/src/decoder/VorbisDecoderPlugin.cxx index 36b3e3139..68d5a21f0 100644 --- a/src/decoder/VorbisDecoderPlugin.cxx +++ b/src/decoder/VorbisDecoderPlugin.cxx @@ -158,7 +158,7 @@ vorbis_send_comments(struct decoder *decoder, struct input_stream *is, if (!tag) return; - decoder_tag(decoder, is, tag); + decoder_tag(decoder, is, std::move(*tag)); delete tag; } diff --git a/test/dump_playlist.cxx b/test/dump_playlist.cxx index df7c6d739..ea341ab95 100644 --- a/test/dump_playlist.cxx +++ b/test/dump_playlist.cxx @@ -106,7 +106,7 @@ decoder_data(G_GNUC_UNUSED struct decoder *decoder, enum decoder_command decoder_tag(G_GNUC_UNUSED struct decoder *decoder, G_GNUC_UNUSED struct input_stream *is, - G_GNUC_UNUSED const Tag *tag) + G_GNUC_UNUSED Tag &&tag) { return DECODE_COMMAND_NONE; } diff --git a/test/read_tags.cxx b/test/read_tags.cxx index 515a84706..ee9464b2c 100644 --- a/test/read_tags.cxx +++ b/test/read_tags.cxx @@ -92,7 +92,7 @@ decoder_data(G_GNUC_UNUSED struct decoder *decoder, enum decoder_command decoder_tag(G_GNUC_UNUSED struct decoder *decoder, G_GNUC_UNUSED struct input_stream *is, - G_GNUC_UNUSED const Tag *tag) + G_GNUC_UNUSED Tag &&tag) { return DECODE_COMMAND_NONE; } diff --git a/test/run_decoder.cxx b/test/run_decoder.cxx index 3c236ab2f..a05afb113 100644 --- a/test/run_decoder.cxx +++ b/test/run_decoder.cxx @@ -113,7 +113,7 @@ decoder_data(G_GNUC_UNUSED struct decoder *decoder, enum decoder_command decoder_tag(G_GNUC_UNUSED struct decoder *decoder, G_GNUC_UNUSED struct input_stream *is, - G_GNUC_UNUSED const Tag *tag) + G_GNUC_UNUSED Tag &&tag) { return DECODE_COMMAND_NONE; }