tag/Handler: convert to class with virtual methods
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user