summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Marek <lukasz.m.luki2@gmail.com>2014-05-27 23:04:52 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-05-28 03:52:50 +0200
commit8518da23f59d8f5a52f7c1c919f584a119484d0f (patch)
treef802b9b11a80c0a3d57b682fa3e8f15a5f17c7c1
parentbbc10a1aa537c75224b14252eb94c4c829c61a3b (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>
-rw-r--r--cmdutils.c35
-rw-r--r--cmdutils.h9
-rw-r--r--cmdutils_common_opts.h1
-rw-r--r--doc/indevs.texi4
-rw-r--r--doc/outdevs.texi4
5 files changed, 45 insertions, 8 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; \
diff --git a/cmdutils.h b/cmdutils.h
index c4a16aac73..76d11a598c 100644
--- a/cmdutils.h
+++ b/cmdutils.h
@@ -431,12 +431,19 @@ int show_license(void *optctx, const char *opt, const char *arg);
/**
* Print a listing containing all the formats supported by the
- * program.
+ * program (including devices).
* This option processing function does not utilize the arguments.
*/
int show_formats(void *optctx, const char *opt, const char *arg);
/**
+ * Print a listing containing all the devices supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_devices(void *optctx, const char *opt, const char *arg);
+
+/**
* Print a listing containing all the codecs supported by the
* program.
* This option processing function does not utilize the arguments.
diff --git a/cmdutils_common_opts.h b/cmdutils_common_opts.h
index 190dba674f..49b5180e37 100644
--- a/cmdutils_common_opts.h
+++ b/cmdutils_common_opts.h
@@ -6,6 +6,7 @@
{ "version" , OPT_EXIT, {.func_arg = show_version}, "show version" },
{ "buildconf" , OPT_EXIT, {.func_arg = show_buildconf}, "show build configuration" },
{ "formats" , OPT_EXIT, {.func_arg = show_formats }, "show available formats" },
+ { "devices" , OPT_EXIT, {.func_arg = show_devices }, "show available devices" },
{ "codecs" , OPT_EXIT, {.func_arg = show_codecs }, "show available codecs" },
{ "decoders" , OPT_EXIT, {.func_arg = show_decoders }, "show available decoders" },
{ "encoders" , OPT_EXIT, {.func_arg = show_encoders }, "show available encoders" },
diff --git a/doc/indevs.texi b/doc/indevs.texi
index 7b94155380..4ea82a4ba8 100644
--- a/doc/indevs.texi
+++ b/doc/indevs.texi
@@ -13,8 +13,8 @@ You can disable all the input devices using the configure option
option "--enable-indev=@var{INDEV}", or you can disable a particular
input device using the option "--disable-indev=@var{INDEV}".
-The option "-formats" of the ff* tools will display the list of
-supported input devices (amongst the demuxers).
+The option "-devices" of the ff* tools will display the list of
+supported input devices.
A description of the currently available input devices follows.
diff --git a/doc/outdevs.texi b/doc/outdevs.texi
index 488a1ad362..e68653fd7a 100644
--- a/doc/outdevs.texi
+++ b/doc/outdevs.texi
@@ -13,8 +13,8 @@ You can disable all the output devices using the configure option
option "--enable-outdev=@var{OUTDEV}", or you can disable a particular
input device using the option "--disable-outdev=@var{OUTDEV}".
-The option "-formats" of the ff* tools will display the list of
-enabled output devices (amongst the muxers).
+The option "-devices" of the ff* tools will display the list of
+enabled output devices.
A description of the currently available output devices follows.