From 481a3667495425db9fdffb653292b6460fb68208 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 12 Aug 2014 16:51:28 +0000 Subject: cmdutils: allow matching by metadata in stream specifiers --- cmdutils.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'cmdutils.c') diff --git a/cmdutils.c b/cmdutils.c index 69a11bdd4f..b208e52d68 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -1536,6 +1536,29 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec) spec += 2; stream_id = strtol(spec, &endptr, 0); return stream_id == st->id; + } else if (*spec == 'm' && *(spec + 1) == ':') { + AVDictionaryEntry *tag; + char *key, *val; + int ret; + + spec += 2; + val = strchr(spec, ':'); + + key = val ? av_strndup(spec, val - spec) : av_strdup(spec); + if (!key) + return AVERROR(ENOMEM); + + tag = av_dict_get(st->metadata, key, NULL, 0); + if (tag) { + if (!val || !strcmp(tag->value, val + 1)) + ret = 1; + else + ret = 0; + } else + ret = 0; + + av_freep(&key); + return ret; } else if (!*spec) /* empty specifier, matches everything */ return 1; -- cgit v1.2.3