tag/Handler: convert to class with virtual methods

This commit is contained in:
Max Kellermann
2018-07-05 19:07:05 +02:00
parent 09d4176210
commit 3d3a1232b1
49 changed files with 414 additions and 496 deletions

View File

@@ -43,46 +43,42 @@ static constexpr struct tag_table ffmpeg_tags[] = {
static void
FfmpegScanTag(TagType type,
AVDictionary *m, const char *name,
const TagHandler &handler, void *handler_ctx)
TagHandler &handler) noexcept
{
AVDictionaryEntry *mt = nullptr;
while ((mt = av_dict_get(m, name, mt, 0)) != nullptr)
tag_handler_invoke_tag(handler, handler_ctx,
type, mt->value);
handler.OnTag(type, mt->value);
}
static void
FfmpegScanPairs(AVDictionary *dict,
const TagHandler &handler, void *handler_ctx)
FfmpegScanPairs(AVDictionary *dict, TagHandler &handler) noexcept
{
AVDictionaryEntry *i = nullptr;
while ((i = av_dict_get(dict, "", i, AV_DICT_IGNORE_SUFFIX)) != nullptr)
tag_handler_invoke_pair(handler, handler_ctx,
i->key, i->value);
handler.OnPair(i->key, i->value);
}
void
FfmpegScanDictionary(AVDictionary *dict,
const TagHandler &handler, void *handler_ctx)
FfmpegScanDictionary(AVDictionary *dict, TagHandler &handler) noexcept
{
if (handler.tag != nullptr) {
if (handler.WantTag()) {
for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i)
FfmpegScanTag(TagType(i), dict, tag_item_names[i],
handler, handler_ctx);
handler);
for (const struct tag_table *i = ffmpeg_tags;
i->name != nullptr; ++i)
FfmpegScanTag(i->type, dict, i->name,
handler, handler_ctx);
handler);
for (const struct tag_table *i = musicbrainz_txxx_tags;
i->name != nullptr; ++i)
FfmpegScanTag(i->type, dict, i->name,
handler, handler_ctx);
handler);
}
if (handler.pair != nullptr)
FfmpegScanPairs(dict, handler, handler_ctx);
if (handler.WantPair())
FfmpegScanPairs(dict, handler);
}