Skip to content

Commit

Permalink
ffmpeg: add -devices param
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Michael Niedermayer <[email protected]>
  • Loading branch information
Lukasz Marek authored and michaelni committed May 28, 2014
1 parent bbc10a1 commit 8518da2
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 8 deletions.
35 changes: 32 additions & 3 deletions cmdutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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; \
Expand Down
9 changes: 8 additions & 1 deletion cmdutils.h
Original file line number Diff line number Diff line change
Expand Up @@ -431,11 +431,18 @@ 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.
Expand Down
1 change: 1 addition & 0 deletions cmdutils_common_opts.h
Original file line number Diff line number Diff line change
Expand Up @@ -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" },
Expand Down
4 changes: 2 additions & 2 deletions doc/indevs.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
4 changes: 2 additions & 2 deletions doc/outdevs.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down

0 comments on commit 8518da2

Please sign in to comment.