From patchwork Wed Sep 15 17:22:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 30262 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp484563iov; Wed, 15 Sep 2021 10:23:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJza7fxICeQBRD866EBA5Q52gTFKgDMl6gXBZ+q071HAxLJ4aMJReakeXKmgoIkk87q/kXmE X-Received: by 2002:a50:ff0b:: with SMTP id a11mr1138141edu.373.1631726607647; Wed, 15 Sep 2021 10:23:27 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v8si582585ejv.188.2021.09.15.10.23.27; Wed, 15 Sep 2021 10:23:27 -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=@outlook.com header.s=selector1 header.b=t5ibjYzG; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA58C68AFD4; Wed, 15 Sep 2021 20:23:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2092.outbound.protection.outlook.com [40.92.90.92]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9266E68AD0C for ; Wed, 15 Sep 2021 20:23:13 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UlhgjZGs69chKilQvTM2WUF89llT1ifhNgbDUTfyZpBVWPutKKM8WYzxqy6faR/txJ9P4ob5OvOwwKUU514NTfqUuyaNel9Q4gfSasPNhJJ0KI//3BVZlsdZxmVK5kFq2leQ0xKbjRvFCibZVnqsbSI6ofw1VW2yIgjFM93oak/8/fCLJnOURNLQfJPV4MEcUdhHOb09GW7IhlKFnKlbAHAqryXfoRnibGicurvcb1R+/wgOQXXhUCYTOYJLbBXNnlync8xLmsIjtpWXR62RWvoPANSCTXE7bs9wI5fejrnixfrKgY5pN+16BwfB2eCAmq7X2bcH12Ay3LtW4rdxYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=6r3qL8L/YtDO+kTZa9yvzYQNnxt4Ba0vm7UQEZjKZfc=; b=bTAWY0nNy5y1xgB6sWH042RjrDexKUp47Llg56ZkRZ3KSzQ0pTnuDNiCLG1Ej8Kquz85GcRitw7sekP1PnWhhOrolb2U1kGBqC7tE9Jnzexdr24uTX4lzDVDPCtNrfYx6yxQe6yGX7i4sz9yzFNNF8WgYH9RtXsHC3oWzI9x84Ng50xLt3JO6YpKhDq3XE/Q28t1b7t0uRpJGXtk6GwlQk+cmF1jtHFHVyCmFVw0TnfsX2sDmq3tT6glZFAccOBFUPT2jh1ceghkU4ywP4MB98PtAhTLZurKdsiiImngs0aAKbNHFYXIOtPA2Hu/8963cvKwrKBqCWY7OxEuDv7UxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6r3qL8L/YtDO+kTZa9yvzYQNnxt4Ba0vm7UQEZjKZfc=; b=t5ibjYzGFIGD2DaQbiAH26QyHI44OQH9m/XzsJ/iSI7nOxf3hy2ZFE2VjnIKudfaVv2zu4GTqHxV4IOnJVcl+eWe6xFn67j7HlwrCPbEDM2enXldNTUB5XeuXpxonO8wJZGOkhqMxSBzzXEbX2ds2Ervaub709TA9m5qFmKcsr2MXOin1gfAxrBDi95c+n4RM6wH7I1Ph58tV0ZXiP1Af2khwpQSm6UFmi0CyoKX8oPhP32FwwDu0rhLiAEu75StO3Ov+b8JD99SB9U6S+xED53maOW2s6MhHnroPVWwDchslugZ2P0bmT6Rvah84R9c8Eq+cDXoWbErok0D162wZg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB3957.eurprd03.prod.outlook.com (2603:10a6:20b:15::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.16; Wed, 15 Sep 2021 17:23:12 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::787b:2156:ca99:fe00]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::787b:2156:ca99:fe00%4]) with mapi id 15.20.4500.019; Wed, 15 Sep 2021 17:23:12 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 15 Sep 2021 19:22:55 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [N/IUZSK+A6nfHXFITxyBTX5z4k24gTO0] X-ClientProxiedBy: AM0PR02CA0153.eurprd02.prod.outlook.com (2603:10a6:20b:28d::20) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20210915172257.4090685-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.142.38) by AM0PR02CA0153.eurprd02.prod.outlook.com (2603:10a6:20b:28d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14 via Frontend Transport; Wed, 15 Sep 2021 17:23:12 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 013db4bb-69e2-4951-609a-08d9786d7ee2 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNXfHZQH94EuYDPZCXB5h7IrJTkGjiLwBY6sHjAlnf/7RXcICJ3y4Wn42q1lrpMPBSHPpKV/dnWiSh3/JNM1xuInKA5TDzQUtfw8Wx/C270O5cli0KYWK9yb2UIN/clPIpc4WPOmx0Lym8UYmP97+pjvHmFrTA3x3iwfTYyFiyzu4TuBN84UFjPQAUFTv/CM/yIKfQIy/TqsmR4m86crTqqaHD5SsMqpgwVZmCO49bkveF+iQEQs/+QUEJCdf+/PIVYy+Y/d8brFaSwVmJGXqsXFhKBHQTApo70lBpTS9z6pO5278cL5EKfjRDnwXHMsSLcacevqu39oL2AMF5hTCUB+Zi5SO/vBrZy2VVVdTTGey+EplOjrb5mEbY+caHKKpUKub/RRGjjyaNf2/K4QZj2id1g2wVbXOudJdUkMbxXcLOMrnSKFUDdG5fZk2rSLOIsJmQZ+AkyjJLmfbk4ViqQIuV9uj1O7zJ+hQsNBRf8t2fyaRvi4ecttfJqrKmta2hnB+jBbgRxbH5h+HyCXzmvnoyCtQySWWIPFYUYSwfjIoFQwechZxFZEbyuZ70V+JNaWVBRoHfDXYgZlolE2hfUODDTbMJzbcw90gnkuY3RZoyCv41i7hQn015PHIHBvudSsPti2VAKKrktwq6P6lVvXqWtyQ152gRJJhrpRgtcjYvRlxoJ9ZeFw8UHeV1e4ZrwxFXbDwCgKKLgz5epgoTSimZ2qBIkvy00= X-MS-TrafficTypeDiagnostic: AM6PR03MB3957: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zaLNBXjzO1KHDXVGN3dc3A/ZWEFcNPw9EM0AZuY5FCTPpZaDV/o8172TzuD8v+0Z3q4x59keQiDbMQlhr5Z6ivzzsrxZ6ZsOvDJdWFcMUGz/OXc/ITZkQ5u5Pg97c7cmoljrpwQnjIKJnu9uOPgeJKLpwcrJdjmMlle363PFMm7EQvezHd/bcwHxy20eOVZdZcjQO0wKx9CF2ndRLwS6u6QBfkODPK/wjdvdxThIzvUN6w18TMA1rBnO73NDlUn2dJmvzalkcx/CxUpWZceRzHIrOVAPUiUJsvKH/Jqu3pK/8rrO3wg5zo/xp4HKCZjZ1OXc9IMssJpy4BXO1TnWlW9ZL1ImoHdq0KBipG7dqiV2POoswdeTf4HFAcL92cQ8dkuAadPQvhhNiYJMDPVKLj1Om0nWDhKkcAlqlVnG0W5hovKKAIEymjgAGXmZXrLD X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bfgfq3nin+FSfH8IL2HC2ixepLjIFdw9HuMkc+pEAS+mDJbP9a/VEX3wG+KXkG2YX9RDhy02+W7Y8nE0Cs+nS9ejqXjj7k8aGB8svF9t7gGSwL2i2tQxXnk/BO+858GONgQ1oUUA5WJdbNkozHujeQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 013db4bb-69e2-4951-609a-08d9786d7ee2 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2021 17:23:12.8026 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR03MB3957 Subject: [FFmpeg-devel] [PATCH 3/5] avutil/opt: Add search flag to search children after the current object 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 8KBypFrxLm+c The current way searches children first which is odd and not always intended. Signed-off-by: Andreas Rheinhardt --- Missing APIchanges entry and version bump. libavutil/opt.c | 12 ++++++++++++ libavutil/opt.h | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/libavutil/opt.c b/libavutil/opt.c index 41284d4ecd..de06728cd1 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -1679,6 +1679,11 @@ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, return NULL; if (search_flags & AV_OPT_SEARCH_CHILDREN) { + /* Searching children both last and first makes no sense. */ + if (search_flags & AV_OPT_SEARCH_CHILDREN_AFTER_ME) + return NULL; + +search_children: if (search_flags & AV_OPT_SEARCH_FAKE_OBJ) { void *iter = NULL; const AVClass *child; @@ -1691,6 +1696,11 @@ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, if (o = av_opt_find2(child, name, unit, opt_flags, search_flags, target_obj)) return o; } + /* If the AV_OPT_SEARCH_CHILDREN_AFTER_ME flag is set, + * then we have already unsuccesfully checked our own options + * and it is certain that this option is unrecognized. */ + if (search_flags & AV_OPT_SEARCH_CHILDREN_AFTER_ME) + return NULL; } while (o = av_opt_next(obj, o)) { @@ -1706,6 +1716,8 @@ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, return o; } } + if (search_flags & AV_OPT_SEARCH_CHILDREN_AFTER_ME) + goto search_children; return NULL; } diff --git a/libavutil/opt.h b/libavutil/opt.h index 2820435eec..5ce4a8d03d 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -558,6 +558,13 @@ int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational #define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the given object first. */ +/** + * Search in possible children of the given object after having + * searched the options of the object itself. + * This flag must not be combined with AV_OPT_SEARCH_CHILDREN. + */ +#define AV_OPT_SEARCH_CHILDREN_AFTER_ME (1 << 3) + /** * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass * instead of a required pointer to a struct containing AVClass. This is