From patchwork Wed Jan 31 20:25:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Dekker X-Patchwork-Id: 7463 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.156.27 with SMTP id q27csp2173629jak; Wed, 31 Jan 2018 12:26:59 -0800 (PST) X-Google-Smtp-Source: AH8x227PUMCWqh71o2ljhIiC6jVuvQkGsPZT54NgNPUxC9YfBCLL1kq6nWjP4/XsAALEr81FgRcw X-Received: by 10.28.118.13 with SMTP id r13mr20976285wmc.95.1517430419009; Wed, 31 Jan 2018 12:26:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517430418; cv=none; d=google.com; s=arc-20160816; b=e1nVmuX/AmuKsJfdBSTpgfSHNfPmq0q5fSW/ekfMZnQjm7elsQvbHwiuWGKvGO9sDq KVB3qFav9FpnK5yC+gwqq9EKlE+VOQHvPrNJ7J7z8HEhA0DetmP10oFVBKejaOyyQVgM 9V5uIs3g+oabA53KOlvsV5SYWhmFDjHY52J3SKLJZTO3dc/5SpxMLa2Y+djpkzILJdoE t47Bosayw0BCLY4ZtvJIGyFapkLBYwJBGINI3PLSHIExpIBkEWcwRAWqlU6pV+XROscU Tbir9RbFXJvQZNpXjcNNAHr4ZcoG0JJmi+iVTHezo8+c5bk0SeYsOVGfJ2CnQDPOkNBe SJBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:dkim-signature:delivered-to :arc-authentication-results; bh=5X1cRvx7LaaymfpSADDxSy4GqRxHnqW5WyoF7HfBwW0=; b=hyEHz8PkqJqrjQ0heWcxBYx1SdMiKVl+6M3tsh/eMoUEUezeRC9RlMuUghxv1WTvch qlyVuVf8nHvFia8x4MmV8B8+AigjxaLzOjJHSjMNaOLWsgQMgU69xjd3tEPkd2j1RUzX GX9btp7HIzabR6LtDs5FsLm8Ho0SB8G98xdv6aPYzz8JIRtRE6a5/qOWRqBSF/byPbLI NnGiTcnCzJ4L2pRKvDUCl6p65EIVtrUlnIcuNhWP5vUqcwWo5R6lRLPuKpgOZXCT+ZLf /JOfx+xwPZRoq0tPwdHzxiZb+jGEHiLqk7l1BFdgMQI0JUDvCsh6gAmPE7+9CcorT+V2 +SDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@itanimul.li header.s=fm1 header.b=LhTYEB2N; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm1 header.b=PAahrB56; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p5si11226009wrc.266.2018.01.31.12.26.58; Wed, 31 Jan 2018 12:26:58 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@itanimul.li header.s=fm1 header.b=LhTYEB2N; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm1 header.b=PAahrB56; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F29AE689AC6; Wed, 31 Jan 2018 22:26:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3440C689A69 for ; Wed, 31 Jan 2018 22:26:03 +0200 (EET) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 4D69320C45 for ; Wed, 31 Jan 2018 15:26:02 -0500 (EST) Received: from frontend1 ([10.202.2.160]) by compute4.internal (MEProxy); Wed, 31 Jan 2018 15:26:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=itanimul.li; h= date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=uSEWwEmoKmICsyycE eIjDGVJGcywwTy38us5K4GxiqY=; b=LhTYEB2NtDNZJpofyo4ApI0PL+U7Qsgza JrFzV3h+vZVWR0uBGSGKXX94qnl2q5NP1sJ7CkBS445rm0FU8wBS+WQZWAjz2TTS V3b/OVLghJAq2MItMEZ86DG28pTrKTvC/65GAjTxVIcnwCqKWQHZVjqkneuFPXNN rfMjjeCWKLyvBptOIo9zTeChcto712fx6uywBlFW9QjcNoivFCDiOvxi2E20KJxZ PKyCPNnZjJRJBDPzz0nty724iEhgSP0U1CDIGKN8gz4UOT1oSIpJbPUnSISJ5sdV Rr368bmnen2e180Z6sIADK+SCWk4Ob+NNQZ0wrbxKM9begVnrJzfQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; bh=uSEWwEmoKmICsyycEeIjDGVJGcywwTy38us5K4GxiqY=; b=PAahrB56 LVFBt+W7Jzvy/k1tuvEC52qeBc/H+NeyDoOnKZU0ik5aB48e+yU8GqBxAJxsj/Lt uJ1kfTPIpUtdDVd+ulLtFVZiGoTUhr2VbQuDgAV5G8n/PYE2OpJsWFO558WJTrEe nTNBjb6qsLaESrsHoZDilWZwU7QAIv21TjvopXm0XYwoBfdHe46x0nzq4wrqVgyd xgcuoQn+bkkThK0OJ7U5gx9OzhnPtM35xG2U0oF6iNjgizlO7HCoIWRbMoBN3wF8 I6B7M9Oe7w3Vr6BkTopg2aYxgNs6JG8gBI3qV8yiDmECYbkiMnfwB6qMNN0TbP0z WTWQSzkxTVuV7A== X-ME-Sender: Received: from DESKTOP-AFAL1BE.localdomain (cpc75394-sotn16-2-0-cust168.15-1.cable.virginm.net [82.22.8.169]) by mail.messagingengine.com (Postfix) with ESMTPA id BA5D57E664 for ; Wed, 31 Jan 2018 15:26:01 -0500 (EST) From: Josh de Kock To: ffmpeg-devel@ffmpeg.org Date: Wed, 31 Jan 2018 20:25:55 +0000 Message-Id: <1517430355-4183-6-git-send-email-josh@itanimul.li> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517430355-4183-1-git-send-email-josh@itanimul.li> References: <1517430355-4183-1-git-send-email-josh@itanimul.li> Subject: [FFmpeg-devel] [PATCH v3 6/6] cmdutils: make use of new iteration APIs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- 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);