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