From patchwork Fri Feb 2 19:44:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Dekker X-Patchwork-Id: 7490 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.150.1 with SMTP id c1csp783812jai; Fri, 2 Feb 2018 11:45:30 -0800 (PST) X-Google-Smtp-Source: AH8x224mJwR9Isn6+mnRpjWe93nT/lGGeWWDRM07el/NTZNfQD9cB5kaMtNJu/JqXLIjqvFDqw2j X-Received: by 10.223.162.142 with SMTP id s14mr33279696wra.175.1517600729951; Fri, 02 Feb 2018 11:45:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517600729; cv=none; d=google.com; s=arc-20160816; b=BSaWHOL/K+3fyxDm2TSnCeZrMcx+V7Haq6T4zrZqqmJeS8leLCsq2axFTOUeFB3sjv kIqivQrF6pDgfoGh8qb8CT+iKIcwIlsaQ6ZpFBOMUZHRE66gmzvJbFryosfU2EAd6ePw s2icO7SBrUlq3qe2Vj+14HNUsSthe4E07mZb56MF54ScFKdOWVKhxQlojcI3hAy099hh DE9StUFrnREBU/oDKzHeYV+18ijgChSa6TZoaCUzzfFfvWymwBfFMNP93hMods74T9AV 5TmHOlP/Jd1tnp7N4A0pZsZgsYItxXU+m55de4SpCH0m94MJo1zmv08EY8hP/irK7pa7 5m5Q== 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=q9kI7XU/D3/Z5U2k1XuvbZhCQk+pYhjnXPF6ZNbs27ELZzuzL8NUgmtZV3eMIdnjJt qRM0Ov2wOt+L+NIq0kYT+VAQ9a+g8BvcosN9Q/wFOmJgi4zWLgq4QLbI9XQu5Nbwq+9r y7p0J3W9dj3y/EJ8naxBdqTiY1DCtLwGIS+4pcB6MfS5LVpZuhGKW+zzW2EVsUxXEJyd Tjkkc9hX/ddr2jK6J/34Y62aoFu5/0CGQhPWibJY6bTrB2m3EavAdUojP5WAKFu0f7ku d8zxfV3TZnJXpMtpLhpOo3Sx8di/+Dj4L7MB8nyRI2CALBXNJfIITSpHRe8SzJJ6rZzS XYog== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@itanimul.li header.s=fm1 header.b=cDludHBu; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm1 header.b=Rkxy3Nbt; 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 v6si2279063wrc.248.2018.02.02.11.45.29; Fri, 02 Feb 2018 11:45:29 -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=cDludHBu; dkim=neutral (body hash did not verify) header.i=@messagingengine.com header.s=fm1 header.b=Rkxy3Nbt; 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 2AF4E689BB7; Fri, 2 Feb 2018 21:44:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 68151689B85 for ; Fri, 2 Feb 2018 21:44:24 +0200 (EET) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id C60C8224D4 for ; Fri, 2 Feb 2018 14:44:25 -0500 (EST) Received: from frontend1 ([10.202.2.160]) by compute4.internal (MEProxy); Fri, 02 Feb 2018 14:44:25 -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=cDludHBuNjYHp1dGcdmgzhquW0d+Z9MKk G4/CwSwNYb3dKQu9lR+mVKGXNqvs8GYnkJKFAT/ChauH1TMfndpYYfT9ubEnuziX 5DZlc4VqnmZ1VJvoKfUjQRZwV/7t5dgL8SJDwE7kte2BcYMlno+dOx/i0IVUPDqA siKd5Ev8I7y0cx0CRsQNABt3NrO8uKbmewYiDLrMc9hv1LQlYryrHs+GXyvpuMtf SG/Chx8XT3Z8TF8eh/WOxR9fkQkoxETHugg7G5a2O08W/j5L9l6or/degSiQr8fq uGF7DC2V+FumZkX83bdQXg+L6yQy21htV3aXm0MD1ycMZlv0EnaNA== 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=Rkxy3Nbt d6E8MpP+EtYkkdDQCDpqY+YkF1WfDKNuIyj5iOx3vXjOHKK1rLINDQ9SVv79gPMd wqwf9pOHfDDTh+FBTTIzCeYP3xz+K1vzFTTHgb8t7TvGBi+foER+yso2FZ8YLTnc PjLCNW9kjW2+DD+y2qtk1KN+zY4Mj8kgeaa60A9aRXUu4FaABvTiwy/5BinkUDk4 08xY6QhMVFonN85Ts7ydu+ZTe+goq4rER7L75P/t2HiN01iTuD6BxyylwWRyj9YL y2EGPrSRYUrEJfuv0cfVw/CbnzkaOqekP4ux+JNWc7cgCNrm7YoVlj08zSUUWPeA yi/9zpKLgM1SQA== 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 56EAD7E78D for ; Fri, 2 Feb 2018 14:44:25 -0500 (EST) From: Josh de Kock To: ffmpeg-devel@ffmpeg.org Date: Fri, 2 Feb 2018 19:44:17 +0000 Message-Id: <1517600658-32681-6-git-send-email-josh@itanimul.li> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1517600658-32681-1-git-send-email-josh@itanimul.li> References: <1517600658-32681-1-git-send-email-josh@itanimul.li> Subject: [FFmpeg-devel] [PATCH v4 6/7] 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);