diff options
author | Lukasz Marek <lukasz.m.luki2@gmail.com> | 2014-05-28 01:04:52 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-05-28 05:52:50 +0400 |
commit | 8518da23f59d8f5a52f7c1c919f584a119484d0f (patch) | |
tree | f802b9b11a80c0a3d57b682fa3e8f15a5f17c7c1 /cmdutils.c | |
parent | bbc10a1aa537c75224b14252eb94c4c829c61a3b (diff) |
ffmpeg: add -devices param
FFmpeg mix devices and file formats when -formats option is used.
This commit adds a -devices param to list devices only.
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'cmdutils.c')
-rw-r--r-- | cmdutils.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/cmdutils.c b/cmdutils.c index 1147bc338e..63d64320eb 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -1193,16 +1193,29 @@ int show_license(void *optctx, const char *opt, const char *arg) return 0; } -int show_formats(void *optctx, const char *opt, const char *arg) +static int is_device(const AVClass *avclass) +{ + if (!avclass) + return 0; + return avclass->category == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT || + avclass->category == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT || + avclass->category == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT || + avclass->category == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT || + avclass->category == AV_CLASS_CATEGORY_DEVICE_OUTPUT || + avclass->category == AV_CLASS_CATEGORY_DEVICE_INPUT; +} + +static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only) { AVInputFormat *ifmt = NULL; AVOutputFormat *ofmt = NULL; const char *last_name; + int is_dev; - printf("File formats:\n" + printf("%s\n" " D. = Demuxing supported\n" " .E = Muxing supported\n" - " --\n"); + " --\n", device_only ? "Devices:" : "File formats:"); last_name = "000"; for (;;) { int decode = 0; @@ -1211,6 +1224,9 @@ int show_formats(void *optctx, const char *opt, const char *arg) const char *long_name = NULL; while ((ofmt = av_oformat_next(ofmt))) { + is_dev = is_device(ofmt->priv_class); + if (!is_dev && device_only) + continue; if ((name == NULL || strcmp(ofmt->name, name) < 0) && strcmp(ofmt->name, last_name) > 0) { name = ofmt->name; @@ -1219,6 +1235,9 @@ int show_formats(void *optctx, const char *opt, const char *arg) } } while ((ifmt = av_iformat_next(ifmt))) { + is_dev = is_device(ifmt->priv_class); + if (!is_dev && device_only) + continue; if ((name == NULL || strcmp(ifmt->name, name) < 0) && strcmp(ifmt->name, last_name) > 0) { name = ifmt->name; @@ -1241,6 +1260,16 @@ int show_formats(void *optctx, const char *opt, const char *arg) return 0; } +int show_formats(void *optctx, const char *opt, const char *arg) +{ + return show_formats_devices(optctx, opt, arg, 0); +} + +int show_devices(void *optctx, const char *opt, const char *arg) +{ + return show_formats_devices(optctx, opt, arg, 1); +} + #define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \ if (codec->field) { \ const type *p = codec->field; \ |