[FFmpeg-devel] [PATCH v4 6/7] cmdutils: make use of new iteration APIs
Josh de Kock
josh at itanimul.li
Fri Feb 2 21:44:17 EET 2018
---
fftools/cmdutils.c | 122 +++++++++++++++++++----------------------------------
1 file changed, 43 insertions(+), 79 deletions(-)
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 6920ca0..9ecc51b 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -1250,19 +1250,11 @@ int show_license(void *optctx, const char *opt, const char *arg)
return 0;
}
-static int is_device(const AVClass *avclass)
-{
- if (!avclass)
- return 0;
- return AV_IS_INPUT_DEVICE(avclass->category) || AV_IS_OUTPUT_DEVICE(avclass->category);
-}
-
static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
{
- AVInputFormat *ifmt = NULL;
- AVOutputFormat *ofmt = NULL;
+ const AVInputFormat *ifmt = NULL;
+ const AVOutputFormat *ofmt = NULL;
const char *last_name;
- int is_dev;
printf("%s\n"
" D. = Demuxing supported\n"
@@ -1275,34 +1267,24 @@ static int show_formats_devices(void *optctx, const char *opt, const char *arg,
const char *name = NULL;
const char *long_name = NULL;
- if (muxdemuxers !=SHOW_DEMUXERS) {
- while ((ofmt = av_oformat_next(ofmt))) {
- is_dev = is_device(ofmt->priv_class);
- if (!is_dev && device_only)
- continue;
- if ((!name || strcmp(ofmt->name, name) < 0) &&
- strcmp(ofmt->name, last_name) > 0) {
- name = ofmt->name;
- long_name = ofmt->long_name;
- encode = 1;
- }
- }
- }
- if (muxdemuxers != SHOW_MUXERS) {
- while ((ifmt = av_iformat_next(ifmt))) {
- is_dev = is_device(ifmt->priv_class);
- if (!is_dev && device_only)
- continue;
- if ((!name || strcmp(ifmt->name, name) < 0) &&
- strcmp(ifmt->name, last_name) > 0) {
- name = ifmt->name;
- long_name = ifmt->long_name;
- encode = 0;
- }
- if (name && strcmp(ifmt->name, name) == 0)
- decode = 1;
- }
- }
+#define x(func, type, condition) do { \
+ void *i = 0; \
+ if (condition) { \
+ while ((type = func(&i))) { \
+ if ((!name || strcmp(type->name, name) < 0) && \
+ strcmp(type->name, last_name) > 0) { \
+ name = type->name; \
+ long_name = type->long_name; \
+ encode = 1; \
+ } \
+ } \
+ } } while(0)
+
+ x(av_muxer_iterate, ofmt, muxdemuxers != SHOW_DEMUXERS && !device_only);
+ x(av_outdev_iterate, ofmt, muxdemuxers != SHOW_DEMUXERS);
+ x(av_demuxer_iterate, ifmt, muxdemuxers != SHOW_MUXERS && !device_only);
+ x(av_indev_iterate, ifmt, muxdemuxers != SHOW_MUXERS);
+#undef x
if (!name)
break;
last_name = name;
@@ -1442,7 +1424,8 @@ static char get_media_type_char(enum AVMediaType type)
static const AVCodec *next_codec_for_id(enum AVCodecID id, const AVCodec *prev,
int encoder)
{
- while ((prev = av_codec_next(prev))) {
+ void *i = 0;
+ while ((prev = av_codec_iterate(&i))) {
if (prev->id == id &&
(encoder ? av_codec_is_encoder(prev) : av_codec_is_decoder(prev)))
return prev;
@@ -2116,7 +2099,7 @@ double get_rotation(AVStream *st)
}
#if CONFIG_AVDEVICE
-static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
+static int print_device_sources(const AVInputFormat *fmt, AVDictionary *opts)
{
int ret, i;
AVDeviceInfoList *device_list = NULL;
@@ -2131,7 +2114,7 @@ static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
goto fail;
}
- if ((ret = avdevice_list_input_sources(fmt, NULL, opts, &device_list)) < 0) {
+ if ((ret = avdevice_list_input_sources((AVInputFormat*)fmt, NULL, opts, &device_list)) < 0) {
printf("Cannot list sources.\n");
goto fail;
}
@@ -2146,7 +2129,7 @@ static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
return ret;
}
-static int print_device_sinks(AVOutputFormat *fmt, AVDictionary *opts)
+static int print_device_sinks(const AVOutputFormat *fmt, AVDictionary *opts)
{
int ret, i;
AVDeviceInfoList *device_list = NULL;
@@ -2161,7 +2144,7 @@ static int print_device_sinks(AVOutputFormat *fmt, AVDictionary *opts)
goto fail;
}
- if ((ret = avdevice_list_output_sinks(fmt, NULL, opts, &device_list)) < 0) {
+ if ((ret = avdevice_list_output_sinks((AVOutputFormat*)fmt, NULL, opts, &device_list)) < 0) {
printf("Cannot list sinks.\n");
goto fail;
}
@@ -2200,7 +2183,8 @@ static int show_sinks_sources_parse_arg(const char *arg, char **dev, AVDictionar
int show_sources(void *optctx, const char *opt, const char *arg)
{
- AVInputFormat *fmt = NULL;
+ const AVInputFormat *fmt = NULL;
+ void *i = 0;
char *dev = NULL;
AVDictionary *opts = NULL;
int ret = 0;
@@ -2211,24 +2195,14 @@ int show_sources(void *optctx, const char *opt, const char *arg)
if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
goto fail;
- do {
- fmt = av_input_audio_device_next(fmt);
- if (fmt) {
- if (!strcmp(fmt->name, "lavfi"))
- continue; //it's pointless to probe lavfi
- if (dev && !av_match_name(dev, fmt->name))
- continue;
- print_device_sources(fmt, opts);
- }
- } while (fmt);
- do {
- fmt = av_input_video_device_next(fmt);
- if (fmt) {
- if (dev && !av_match_name(dev, fmt->name))
- continue;
- print_device_sources(fmt, opts);
- }
- } while (fmt);
+ while ((fmt = av_indev_iterate(&i))) {
+ if (!strcmp(fmt->name, "lavfi"))
+ continue; //it's pointless to probe lavfi
+ if (dev && !av_match_name(dev, fmt->name))
+ continue;
+ print_device_sources(fmt, opts);
+ }
+
fail:
av_dict_free(&opts);
av_free(dev);
@@ -2238,7 +2212,8 @@ int show_sources(void *optctx, const char *opt, const char *arg)
int show_sinks(void *optctx, const char *opt, const char *arg)
{
- AVOutputFormat *fmt = NULL;
+ const AVOutputFormat *fmt = NULL;
+ void *i = 0;
char *dev = NULL;
AVDictionary *opts = NULL;
int ret = 0;
@@ -2249,22 +2224,11 @@ int show_sinks(void *optctx, const char *opt, const char *arg)
if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
goto fail;
- do {
- fmt = av_output_audio_device_next(fmt);
- if (fmt) {
- if (dev && !av_match_name(dev, fmt->name))
- continue;
- print_device_sinks(fmt, opts);
- }
- } while (fmt);
- do {
- fmt = av_output_video_device_next(fmt);
- if (fmt) {
- if (dev && !av_match_name(dev, fmt->name))
- continue;
- print_device_sinks(fmt, opts);
- }
- } while (fmt);
+ while ((fmt = av_outdev_iterate(&i))) {
+ if (dev && !av_match_name(dev, fmt->name))
+ continue;
+ print_device_sinks(fmt, opts);
+ }
fail:
av_dict_free(&opts);
av_free(dev);
--
2.7.4
More information about the ffmpeg-devel
mailing list