From: Anton Khirnov Date: Tue, 12 Aug 2014 16:51:28 +0000 (+0000) Subject: cmdutils: allow matching by metadata in stream specifiers X-Git-Tag: v11_alpha2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=481a3667495425db9fdffb653292b6460fb68208;p=platform%2Fupstream%2Flibav.git cmdutils: allow matching by metadata in stream specifiers --- diff --git a/Changelog b/Changelog index 4f1507a..ea9d721 100644 --- a/Changelog +++ b/Changelog @@ -30,6 +30,7 @@ version : - drop avserver, it was unmaintained for years and largely broken - Icecast protocol - request icecast metadata by default +- support for using metadata in stream specifiers in avtools version 10: diff --git a/cmdutils.c b/cmdutils.c index 69a11bd..b208e52 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; diff --git a/doc/avconv.texi b/doc/avconv.texi index 6efec55..1156176 100644 --- a/doc/avconv.texi +++ b/doc/avconv.texi @@ -720,6 +720,11 @@ To map all the streams except the second audio, use negative mappings avconv -i INPUT -map 0 -map -0:a:1 OUTPUT @end example +To pick the English audio stream: +@example +avconv -i INPUT -map 0:m:language:eng OUTPUT +@end example + Note that using this option disables the default mappings for this output file. @item -map_metadata[:@var{metadata_spec_out}] @var{infile}[:@var{metadata_spec_in}] (@emph{output,per-metadata}) diff --git a/doc/avtools-common-opts.texi b/doc/avtools-common-opts.texi index 3bf321f..8468eca 100644 --- a/doc/avtools-common-opts.texi +++ b/doc/avtools-common-opts.texi @@ -44,6 +44,13 @@ If @var{stream_index} is given, then matches stream number @var{stream_index} in program with id @var{program_id}. Otherwise matches all streams in this program. @item i:@var{stream_id} Match the stream by stream id (e.g. PID in MPEG-TS container). +@item m:@var{key}[:@var{value}] +Matches streams with the metadata tag @var{key} having the specified value. If +@var{value} is not given, matches streams that contain the given tag with any +value. + +Note that in @command{avconv}, matching by metadata will only work properly for +input files. @end table @section Generic options