aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-07-31 00:34:22 +0200
committerMax Kellermann <max@duempel.org>2013-07-31 00:34:22 +0200
commitcbd38327e7f6948647768227ac4836f64e5ccd51 (patch)
tree03510bbcb68e22a76d261089c97a851a0e6596c3
parent06f898cc1240a29b293de0e97ad95a4fdc971254 (diff)
downloadmpd-cbd38327e7f6948647768227ac4836f64e5ccd51.tar.gz
mpd-cbd38327e7f6948647768227ac4836f64e5ccd51.tar.xz
mpd-cbd38327e7f6948647768227ac4836f64e5ccd51.zip
DecoderAPI: pass rvalue reference to decoder_tag()
Avoid duplicating the tag.
-rw-r--r--src/DecoderAPI.cxx7
-rw-r--r--src/DecoderAPI.hxx3
-rw-r--r--src/decoder/FlacDecoderPlugin.cxx2
-rw-r--r--src/decoder/MadDecoderPlugin.cxx5
-rw-r--r--src/decoder/OpusDecoderPlugin.cxx2
-rw-r--r--src/decoder/VorbisDecoderPlugin.cxx2
-rw-r--r--test/dump_playlist.cxx2
-rw-r--r--test/read_tags.cxx2
-rw-r--r--test/run_decoder.cxx2
9 files changed, 13 insertions, 14 deletions
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;
}