From patchwork Fri Aug 20 17:45:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Witten X-Patchwork-Id: 29649 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp1473816iov; Fri, 20 Aug 2021 10:45:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyLTLUGj34oXYzZRDseuNbB7h0U+HQZVKXcvfNAgBTJJePnAvNf7iHXNuY48fqs72QTgLij X-Received: by 2002:a17:907:6089:: with SMTP id ht9mr22920150ejc.422.1629481547508; Fri, 20 Aug 2021 10:45:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629481547; cv=none; d=google.com; s=arc-20160816; b=fINW4hez+OSKneQjJ6lUNch/joMUEISqrNzH89TTk/F3P5QdA4x5U1nzQrEa5h38S2 8c1j6qLKoQPa8m/SkQNQoHe5gbt71Ukherilkdd+oKaAwjShnkbVsUN/qRcfciFF53uK nK9oeMLlFkTyxw9Y7mxEOIawatoJ3e6BQiGfZf2FulMKVNL6EwkklG08uzYxwYRFrB1k lS6wxjKm/84NsV3JtN4TOLpRUA9ItW2VRCs3fTE9Pyak+GjnKamQLwoEnZccuYBkvJ39 GkGodANm0SJe8boza4GUn0dLUy3zGsPVbP5o/v6JxMteeiYoveabZD5iebd4RkFJbpJx Exiw== 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:to :from:date:dkim-signature:delivered-to; bh=FU1TQe1lOIm20NXWN3C/DAIg/b0xsusWCDfCimYQcXM=; b=k/NyJ56y2TG/PBR+Ri2U01ha59OioSLlqg/+H5Bqo95sczwRVPdnFV6ahq76N3xfZ3 H+AL7Wnok3nZipeK94ew7eVwIeovHO6phHdi7ivjjLAdQnffmwexut0Bu/eJpo55EKlK m6YEZikocgfOT+P8DarGAjMNv3ZwKo3Jq7+6gbMGgAN4ybqTVaqZA1IUKXMHaK/VC2Vd OiSIF0dwsSI/k+7MpUhavdJahbp1kcXfkw39WIjauDc0LLJHo1gSNSeiztKxJbk5/q1G 8b/K0GGReyiRF2AgLhNRjvlWpSIKYZYpgg0hSiaY3+QPSxrttpGg59/rJheTFqU4NV7f 7usA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=p7hIpWb7; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id by8si7542887ejb.590.2021.08.20.10.45.46; Fri, 20 Aug 2021 10:45:47 -0700 (PDT) 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=@gmail.com header.s=20161025 header.b=p7hIpWb7; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E0B3868A40E; Fri, 20 Aug 2021 20:45:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 324E868A306 for ; Fri, 20 Aug 2021 20:45:35 +0300 (EEST) Received: by mail-ej1-f48.google.com with SMTP id b15so21674726ejg.10 for ; Fri, 20 Aug 2021 10:45:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:date:from:to:message-id:in-reply-to:references; bh=NtkLEAxHi2CCNvV2Avw7KR9ob2DAzYnK+LuaRYWB868=; b=p7hIpWb7yk/sGsKxzLBKTsoWuCnHst5oV18udAQSniQigaCgfoulZVtJFmXmbrLsBX B6vL54JDR7gvSn9UoiHI1Nd4cq87Ph7EPt/Zn7/ETghnB/62DTf6pL48/XD7TAaENXQP cAm9L1AqeLws+h6o7GPF7MzcRGVxS9P3ZC45aqzl2Kzmf8AZcBQdWVzW0m4iIsnT8cHB WbvejoSQyJAKnIGP4nk0rk57d4JA8am8JOJjbDu1EFOwWLWuAeHm+q+/xGwf2gDULUVV JZWWVKwIoGe52I/Yk0ELLm4GwN5RUIAQ5cpO/UkNCCOR6bkVoxswRoj+MTy4zOOTNfrL AAIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:date:from:to:message-id:in-reply-to :references; bh=NtkLEAxHi2CCNvV2Avw7KR9ob2DAzYnK+LuaRYWB868=; b=Q2daik4+3viD7lrAaa+lM+iZIgcgKitEJGz2n5cZODH/4qlxBj+VlUt4eh1EgRbted X+D6pmKHyhV2rtN/zSmjj4ht3SVokXCaqVLcTn7fyvQS2uQPqCPztYaJPqx+YV2xjJtY V+cm3yghuUHrDtEumdSDnsy96cHL07UXjrmRJwuCi8Zku1OnuDf7B/rDfTfA8TtuODUM iSbNAiEiXP4Pz254omPK7SIrlFBP52ldISfGbQFAvfvU/Ur7A25i6w35erPlwROQMgNM 06NxIUyzVkmVQL4bEwg4WKpbx17KDaH2I7kt/SXFgfNQITtPM89aOa/CAWZT/bg/Qfrt 4vOQ== X-Gm-Message-State: AOAM533YP93enbEXzxLWkVUYeWOWIP2tIvhAssZm81SpTmPOSDvQM6RJ FpcvCXtsdzwLiBXmkf4ZTGyXzPImm7Bs919+vDCB6Q== X-Received: by 2002:a17:906:95c9:: with SMTP id n9mr23211020ejy.178.1629481534526; Fri, 20 Aug 2021 10:45:34 -0700 (PDT) Received: from gmail.com ([198.144.120.177]) by smtp.gmail.com with ESMTPSA id m18sm3975356edr.18.2021.08.20.10.45.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Aug 2021 10:45:34 -0700 (PDT) Date: Fri, 20 Aug 2021 17:45:02 -0000 From: Michael Witten To: ffmpeg-devel@ffmpeg.org Message-ID: In-Reply-To: <657ab02a0fd94501bf90590d3ee9696e@gmail.com> References: <657ab02a0fd94501bf90590d3ee9696e@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 2/2] libavformat/protocols.c: avio_enum_protocols(): Refactor X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: vtwe6XWpZ1M3 Date: Wed, 11 Aug 2021 19:00:00 -0000 This commit is the result of squashing a series of very tiny transformations; it refactors 'avio_enum_protocols()' into 2 functions: * avio_enum_protocols_for_input() * avio_enum_protocols_for_output() Those functions are in turn mostly implemented by this macro: * AVIO_ENUM_PROTOCOLS() The goals of this refactoring were the following: * To make the code more immediately understandable. * To reduce the potential for redundant computation. --- libavformat/avio.h | 2 +- libavformat/protocols.c | 38 +++++++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/libavformat/avio.h b/libavformat/avio.h index 0b35409787..3b92cf742a 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -786,7 +786,7 @@ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); * * @return A static string containing the name of current protocol or NULL */ -const char *avio_enum_protocols(void **opaque, int output); +const char *avio_enum_protocols(void **const opaque, const int output); /** * Get AVClass by names of available protocols. diff --git a/libavformat/protocols.c b/libavformat/protocols.c index e0b3405ab8..4cb8ae0b63 100644 --- a/libavformat/protocols.c +++ b/libavformat/protocols.c @@ -91,19 +91,35 @@ const AVClass *ff_urlcontext_child_class_iterate(void **iter) return ret; } -const char *avio_enum_protocols(void **opaque, int output) +#define AVIO_ENUM_PROTOCOLS(METHOD) \ + typedef const URLProtocol *const *Iterator; \ + for (Iterator p = *opaque ? (Iterator)(*opaque) + 1 : url_protocols; *p; ++p) { \ + if ((*p)->METHOD) { \ + *opaque = (void *)p; \ + return (*p)->name; \ + } \ + } \ + *opaque = NULL; \ + return NULL; + +static inline +const char *avio_enum_protocols_for_output(void **const opaque) { - const URLProtocol *const *p = *opaque; + AVIO_ENUM_PROTOCOLS(url_write); +} - p = p ? p + 1 : url_protocols; - *opaque = (void *)p; - if (!*p) { - *opaque = NULL; - return NULL; - } - if ((output && (*p)->url_write) || (!output && (*p)->url_read)) - return (*p)->name; - return avio_enum_protocols(opaque, output); +static inline +const char *avio_enum_protocols_for_input(void **const opaque) +{ + AVIO_ENUM_PROTOCOLS(url_read); +} + +const char *avio_enum_protocols(void **const opaque, const int output) +{ + if (output) + return avio_enum_protocols_for_output(opaque); + else + return avio_enum_protocols_for_input(opaque); } const AVClass *avio_protocol_get_class(const char *name)