Browse Source

cmdutils: allow matching by metadata in stream specifiers

tags/n2.4
Anton Khirnov 11 years ago
parent
commit
481a366749
4 changed files with 36 additions and 0 deletions
  1. +1
    -0
      Changelog
  2. +23
    -0
      cmdutils.c
  3. +5
    -0
      doc/avconv.texi
  4. +7
    -0
      doc/avtools-common-opts.texi

+ 1
- 0
Changelog View File

@@ -30,6 +30,7 @@ version <next>:
- 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:


+ 23
- 0
cmdutils.c View File

@@ -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;



+ 5
- 0
doc/avconv.texi View File

@@ -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})


+ 7
- 0
doc/avtools-common-opts.texi View File

@@ -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



Loading…
Cancel
Save