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);
|
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
|
void
|
||||||
Tag::DeleteItem(unsigned idx)
|
Tag::DeleteItem(unsigned idx)
|
||||||
{
|
{
|
||||||
|
@ -112,6 +112,11 @@ struct Tag {
|
|||||||
return !IsEmpty() || time >= 0;
|
return !IsEmpty() || time >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear everything, as if this was a new Tag object.
|
||||||
|
*/
|
||||||
|
void Clear();
|
||||||
|
|
||||||
void DeleteItem(unsigned i);
|
void DeleteItem(unsigned i);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,16 +36,10 @@ flac_data::flac_data(struct decoder *_decoder,
|
|||||||
:FlacInput(_input_stream, _decoder),
|
:FlacInput(_input_stream, _decoder),
|
||||||
initialized(false), unsupported(false),
|
initialized(false), unsupported(false),
|
||||||
total_frames(0), first_frame(0), next_frame(0), position(0),
|
total_frames(0), first_frame(0), next_frame(0), position(0),
|
||||||
decoder(_decoder), input_stream(_input_stream),
|
decoder(_decoder), input_stream(_input_stream)
|
||||||
tag(nullptr)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
flac_data::~flac_data()
|
|
||||||
{
|
|
||||||
delete tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
static enum sample_format
|
static enum sample_format
|
||||||
flac_sample_format(unsigned bits_per_sample)
|
flac_sample_format(unsigned bits_per_sample)
|
||||||
{
|
{
|
||||||
@ -116,9 +110,8 @@ void flac_metadata_common_cb(const FLAC__StreamMetadata * block,
|
|||||||
decoder_mixramp(data->decoder,
|
decoder_mixramp(data->decoder,
|
||||||
mixramp_start, mixramp_end);
|
mixramp_start, mixramp_end);
|
||||||
|
|
||||||
if (data->tag != nullptr)
|
flac_vorbis_comments_to_tag(data->tag,
|
||||||
flac_vorbis_comments_to_tag(data->tag,
|
&block->data.vorbis_comment);
|
||||||
&block->data.vorbis_comment);
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -81,10 +81,9 @@ struct flac_data : public FlacInput {
|
|||||||
struct decoder *decoder;
|
struct decoder *decoder;
|
||||||
struct input_stream *input_stream;
|
struct input_stream *input_stream;
|
||||||
|
|
||||||
Tag *tag;
|
Tag tag;
|
||||||
|
|
||||||
flac_data(struct decoder *decoder, struct input_stream *input_stream);
|
flac_data(struct decoder *decoder, struct input_stream *input_stream);
|
||||||
~flac_data();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void flac_metadata_common_cb(const FLAC__StreamMetadata * block,
|
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;
|
data->first_frame = t_start;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (data->tag != nullptr && !data->tag->IsEmpty()) {
|
if (!data->tag.IsEmpty()) {
|
||||||
cmd = decoder_tag(data->decoder, data->input_stream,
|
cmd = decoder_tag(data->decoder, data->input_stream,
|
||||||
std::move(*data->tag));
|
std::move(data->tag));
|
||||||
delete data->tag;
|
data->tag.Clear();
|
||||||
data->tag = new Tag();
|
|
||||||
} else
|
} else
|
||||||
cmd = decoder_get_command(decoder);
|
cmd = decoder_get_command(decoder);
|
||||||
|
|
||||||
@ -260,7 +259,6 @@ flac_decode_internal(struct decoder * decoder,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
struct flac_data data(decoder, input_stream);
|
struct flac_data data(decoder, input_stream);
|
||||||
data.tag = new Tag();
|
|
||||||
|
|
||||||
FLAC__StreamDecoderInitStatus status =
|
FLAC__StreamDecoderInitStatus status =
|
||||||
stream_init(flac_dec, &data, is_ogg);
|
stream_init(flac_dec, &data, is_ogg);
|
||||||
|
@ -228,10 +228,10 @@ flac_scan_metadata(const FLAC__StreamMetadata *block,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
flac_vorbis_comments_to_tag(Tag *tag,
|
flac_vorbis_comments_to_tag(Tag &tag,
|
||||||
const FLAC__StreamMetadata_VorbisComment *comment)
|
const FLAC__StreamMetadata_VorbisComment *comment)
|
||||||
{
|
{
|
||||||
flac_scan_comments(comment, &add_tag_handler, tag);
|
flac_scan_comments(comment, &add_tag_handler, &tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -130,7 +130,7 @@ flac_parse_mixramp(char **mixramp_start, char **mixramp_end,
|
|||||||
const FLAC__StreamMetadata *block);
|
const FLAC__StreamMetadata *block);
|
||||||
|
|
||||||
void
|
void
|
||||||
flac_vorbis_comments_to_tag(Tag *tag,
|
flac_vorbis_comments_to_tag(Tag &tag,
|
||||||
const FLAC__StreamMetadata_VorbisComment *comment);
|
const FLAC__StreamMetadata_VorbisComment *comment);
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user