Tag: add method Clear()
Allow reusing Tag instances.
This commit is contained in:
parent
cbd38327e7
commit
7f9402bd22
16
src/Tag.cxx
16
src/Tag.cxx
@ -132,6 +132,22 @@ void tag_lib_init(void)
|
||||
g_free(temp);
|
||||
}
|
||||
|
||||
void
|
||||
Tag::Clear()
|
||||
{
|
||||
time = -1;
|
||||
has_playlist = false;
|
||||
|
||||
tag_pool_lock.lock();
|
||||
for (unsigned i = 0; i < num_items; ++i)
|
||||
tag_pool_put_item(items[i]);
|
||||
tag_pool_lock.unlock();
|
||||
|
||||
g_free(items);
|
||||
items = nullptr;
|
||||
num_items = 0;
|
||||
}
|
||||
|
||||
void
|
||||
Tag::DeleteItem(unsigned idx)
|
||||
{
|
||||
|
@ -112,6 +112,11 @@ struct Tag {
|
||||
return !IsEmpty() || time >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear everything, as if this was a new Tag object.
|
||||
*/
|
||||
void Clear();
|
||||
|
||||
void DeleteItem(unsigned i);
|
||||
|
||||
/**
|
||||
|
@ -36,16 +36,10 @@ flac_data::flac_data(struct decoder *_decoder,
|
||||
:FlacInput(_input_stream, _decoder),
|
||||
initialized(false), unsupported(false),
|
||||
total_frames(0), first_frame(0), next_frame(0), position(0),
|
||||
decoder(_decoder), input_stream(_input_stream),
|
||||
tag(nullptr)
|
||||
decoder(_decoder), input_stream(_input_stream)
|
||||
{
|
||||
}
|
||||
|
||||
flac_data::~flac_data()
|
||||
{
|
||||
delete tag;
|
||||
}
|
||||
|
||||
static enum sample_format
|
||||
flac_sample_format(unsigned bits_per_sample)
|
||||
{
|
||||
@ -116,9 +110,8 @@ void flac_metadata_common_cb(const FLAC__StreamMetadata * block,
|
||||
decoder_mixramp(data->decoder,
|
||||
mixramp_start, mixramp_end);
|
||||
|
||||
if (data->tag != nullptr)
|
||||
flac_vorbis_comments_to_tag(data->tag,
|
||||
&block->data.vorbis_comment);
|
||||
flac_vorbis_comments_to_tag(data->tag,
|
||||
&block->data.vorbis_comment);
|
||||
|
||||
default:
|
||||
break;
|
||||
|
@ -81,10 +81,9 @@ struct flac_data : public FlacInput {
|
||||
struct decoder *decoder;
|
||||
struct input_stream *input_stream;
|
||||
|
||||
Tag *tag;
|
||||
Tag tag;
|
||||
|
||||
flac_data(struct decoder *decoder, struct input_stream *input_stream);
|
||||
~flac_data();
|
||||
};
|
||||
|
||||
void flac_metadata_common_cb(const FLAC__StreamMetadata * block,
|
||||
|
@ -172,11 +172,10 @@ flac_decoder_loop(struct flac_data *data, FLAC__StreamDecoder *flac_dec,
|
||||
data->first_frame = t_start;
|
||||
|
||||
while (true) {
|
||||
if (data->tag != nullptr && !data->tag->IsEmpty()) {
|
||||
if (!data->tag.IsEmpty()) {
|
||||
cmd = decoder_tag(data->decoder, data->input_stream,
|
||||
std::move(*data->tag));
|
||||
delete data->tag;
|
||||
data->tag = new Tag();
|
||||
std::move(data->tag));
|
||||
data->tag.Clear();
|
||||
} else
|
||||
cmd = decoder_get_command(decoder);
|
||||
|
||||
@ -260,7 +259,6 @@ flac_decode_internal(struct decoder * decoder,
|
||||
return;
|
||||
|
||||
struct flac_data data(decoder, input_stream);
|
||||
data.tag = new Tag();
|
||||
|
||||
FLAC__StreamDecoderInitStatus status =
|
||||
stream_init(flac_dec, &data, is_ogg);
|
||||
|
@ -228,10 +228,10 @@ flac_scan_metadata(const FLAC__StreamMetadata *block,
|
||||
}
|
||||
|
||||
void
|
||||
flac_vorbis_comments_to_tag(Tag *tag,
|
||||
flac_vorbis_comments_to_tag(Tag &tag,
|
||||
const FLAC__StreamMetadata_VorbisComment *comment)
|
||||
{
|
||||
flac_scan_comments(comment, &add_tag_handler, tag);
|
||||
flac_scan_comments(comment, &add_tag_handler, &tag);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -130,7 +130,7 @@ flac_parse_mixramp(char **mixramp_start, char **mixramp_end,
|
||||
const FLAC__StreamMetadata *block);
|
||||
|
||||
void
|
||||
flac_vorbis_comments_to_tag(Tag *tag,
|
||||
flac_vorbis_comments_to_tag(Tag &tag,
|
||||
const FLAC__StreamMetadata_VorbisComment *comment);
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user