From patchwork Mon Sep 6 02:28:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 30035 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp3374640iov; Sun, 5 Sep 2021 19:31:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqXHddJq3T7PlkhlCZpQYOkPjID+wzf8rthe4mb05W9OUEClLV8ZZ2MidbSwMVU/+3MAuf X-Received: by 2002:a05:6402:b85:: with SMTP id cf5mr10999968edb.21.1630895483649; Sun, 05 Sep 2021 19:31:23 -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 t12si8973022edc.179.2021.09.05.19.31.23; Sun, 05 Sep 2021 19:31:23 -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=DNkq6RPL; 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 B83D168A8DB; Mon, 6 Sep 2021 05:28:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-oln040092071040.outbound.protection.outlook.com [40.92.71.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EAC9E68A7A4 for ; Mon, 6 Sep 2021 05:28:36 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bRlMVDYPm+9KjHnB6VLl3WKyaLr+bmErMKOtBSXZnUabgkxsORXaWHjMj+XhBZYKAt8cciWoITD4kBi4+hYsoOqmDbrWURHo9+Rhyx2147Yy8jLo3RlLktU8wvwvlzDgyatyZAUo5qm6V7tXek7bXzCGzTstIMDJ+r1SF4aueaIJDTIgjsu3LF2A1FTHCyTjm0tha/c8mD6BISvbcOSR4ztF8/D8KeZhV7BxgPGhlBn73wNQn6ekB2wLZSnyfozBMT0gGFVwM4drgTxZ+Gu4J+Q3q2zGhJoEVJQ77y7IODmohrdKvWNN0J6h8s2oySkSEXxZ/bpbmsDyha3dasvvog== 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=gksRkJzRFgsNFpa41nEDtH5meee3qIBo9gyGNWT/T0E=; b=dst3fwvCVBjpGRtB/CFs/O3XDVQHdpBplm11QWNug9UpinJmfgZkV8RarRdPg9xndjLB0ro2Q4hRyJYYlOoBFiS671xXIh9nASzP9MySKCtb98Gsf9kk061VsjB956pNIuFDVviKpHNeMcefXxuLYgh4604D8U8mdWUiqZdDC1czmbMTjKgsWcpriMSSNNQxfn424b0pQinip4XJEJ0d2YtvUBHiQFAgtxr4lUPXbueVaMrOPnBpeYOF3i6LDhnAJeIijSlMjMc4vA5agtbGdUnzQezN7yBg5MFVLApT97GxR2A/j9g4jShvAnH+2GJHLopkXigNlXzL1DEe6r5X1w== 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=gksRkJzRFgsNFpa41nEDtH5meee3qIBo9gyGNWT/T0E=; b=DNkq6RPLsH23eFUyq4UFD5Mw9dn5dwRmZDp+/1iOjKGgv4DTtc49iviHM9wsx/8AAqAbnp6Oml4l+maJG2RC/lwE+KjQ5dfIaKE+Dovovrq/9Pbt7pBbKsxdUbghW6XvY/bniVJGKLfdh5o1DVoCwgEl0AyWlkYGZzGLBjYRC7uKEdYFHGV5R12q1XVMVZpsKn9VmIyIhjJos5JjGaApnUkJehRWMX1/yDOuWltIwvq5n682AAZLM3/G7s7VQbBvw6lmgqaNGRK0JhLUyInD683YkpdSfRkV0CsE1RAhXW8om9TSvFv5IGkDkMQhlE+ABjOs5INi5O+GOTYW8Mzu7g== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5380.eurprd03.prod.outlook.com (2603:10a6:20b:c9::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4478.19; Mon, 6 Sep 2021 02:28:32 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::787b:2156:ca99:fe00]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::787b:2156:ca99:fe00%3]) with mapi id 15.20.4478.025; Mon, 6 Sep 2021 02:28:32 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 6 Sep 2021 04:28:00 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 In-Reply-To: References: X-TMN: [D0JCG28q2e7nZ4Wcx5yo0jTMqWif74S6] X-ClientProxiedBy: PR1PR01CA0033.eurprd01.prod.exchangelabs.com (2603:10a6:102::46) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20210906022802.4072793-21-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.142.38) by PR1PR01CA0033.eurprd01.prod.exchangelabs.com (2603:10a6:102::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4478.19 via Frontend Transport; Mon, 6 Sep 2021 02:28:31 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 04081b30-df93-4cc2-04ef-08d970de04f1 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQPQD6tvsiQeosiZzDpp5hDHVlctP8+/jIMDmFujbRuuaT09pJrEJ86sz5axOFN0+5Sf4S2BKMCy/Le6RzvJALF9zksQZ6Bu7PvHcL5oRD3EGTt/IP5yz8JDQu6Z+TiNUKsIPHhGKkqWiL/8CYz2MkiFN4kipKC3A0n5vkqORP7KSuC2ivsEpFshw6Xp/nuNLp6n9oBkJLsVSiYXHYYtLCJL+IrlsX/rnETfg5visco7STcOgAEiwKwUd0MVc+rRRsVS1HA/AocWeFyo9NStOgZ2ZekUchqcpVB1xKc/DcqabTKxVnfBGsSm1ElWCnytjWZ+YySdmV59w7KiJftyW/JCQudzFo2ZmC+MHP7MgSOhWnUSP8pPCo/65DmeBUbvC124cu6BmnO5UHD3Ez3pbIiC+WlJkUkg4FGHdITsAjTCWtCKhnDtB/ZttwqQbRyQyifKQrZX88bfo5Zew32rwUGyC9ecPUihyDKLsGHfryNrHdQVkkKHtNOfzgtkowFhJiZllP0tZlN2v40i7Dq2u9GxBmHIzh7G5aXcV2Nb097QFTPazX+yK5tbkXEl9Dt9Lcu8R6HP97HYEEsj3vt8TeNYxcGKp8uxTbQLu2fZRjUU0UVsjaO4hGXQaiofT2mZ0ODIwgIR1W8wRMRm5Mo8b7uYfXaqck8z0qlszc6ykcEx8NhJrOTQ6EmJ0ffPBrb17CYMxvup92/KOsIxoM7dJ1F3uxsE2NuHteZSRrit3ePzr/GGFj5lAwxmG99rA4rpp8= X-MS-TrafficTypeDiagnostic: AM6PR03MB5380: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2YhaiawUJPWbaLy2vb5th0X7AnEMvnBwEey6OaObsmAkkFJZ3lPn6Hwkji3UQb8HJKdAa0ZoUgHyhitaVZ6koEVQyM0uK8IEhwqlPsKJ2WYstUKo1ZFmbfGv9cnBJ7MgEOzzLPr3SUVU411Cy3BLJc8HQUuhgo1oHzaj0VdJQtiJyeptBIXLgsnPdTFns43U2MKPFnjrRAz65yZ3IXXGcQ5ObqWQmJB+9InuM6Eqetst5cM9+Wbg25TOk2gGzkuAv+5zfMX0ZawmXAp4l75qqBi2gcUWGK+c9MqPZJtC3WSOB8ZtOGIN3NyX73fcUXutLs1VDGgVnGqOQXeeRPQu0SK7Yi6eqpfK+Hjs9KeiaeRAOEJZgBImJB79JtxOndGCQR/3i9n4M3UNqe4QCQp9WZ5ngSMNWS0LWGB+f7gSeilhsXdvbCTL1Qp0h+8pc36Q X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TTgiZAL6JoGQqNcPgjcZ9ruddCHEyfTE9p3o04VLkmeqaDvWMeRxh54UyCI7pybT/wECxVQoRYR7wRbT9FBJsWAxiScfvh0+puIbfvpgJgAp8m6LCeZvzmYr5CWgROJO2EuIgOJo4S8ptWTx2ElgrQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04081b30-df93-4cc2-04ef-08d970de04f1 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Sep 2021 02:28:31.9661 (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: AM6PR03MB5380 Subject: [FFmpeg-devel] [PATCH 32/34] avformat/tee: Process strings immediately if possible 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: hckN7WNqdVNS This avoids having to free them manually lateron. Signed-off-by: Andreas Rheinhardt --- libavformat/tee.c | 54 ++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/libavformat/tee.c b/libavformat/tee.c index 4129954172..88a40ebe87 100644 --- a/libavformat/tee.c +++ b/libavformat/tee.c @@ -96,12 +96,8 @@ static inline int parse_slave_failure_policy_option(const char *opt, TeeSlave *t return AVERROR(EINVAL); } -static int parse_slave_fifo_options(const char *use_fifo, - const char *fifo_options, TeeSlave *tee_slave) +static int parse_slave_fifo_policy(const char *use_fifo, TeeSlave *tee_slave) { - int ret = 0; - - if (use_fifo) { /*TODO - change this to use proper function for parsing boolean * options when there is one */ if (av_match_name(use_fifo, "true,y,yes,enable,enabled,on,1")) { @@ -111,12 +107,12 @@ static int parse_slave_fifo_options(const char *use_fifo, } else { return AVERROR(EINVAL); } - } - - if (fifo_options) - ret = av_dict_parse_string(&tee_slave->fifo_options, fifo_options, "=", ":", 0); + return 0; +} - return ret; +static int parse_slave_fifo_options(const char *fifo_options, TeeSlave *tee_slave) +{ + return av_dict_parse_string(&tee_slave->fifo_options, fifo_options, "=", ":", 0); } static int close_slave(TeeSlave *tee_slave) @@ -174,19 +170,31 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave) if ((ret = ff_tee_parse_slave_options(avf, slave, &options, &filename)) < 0) return ret; -#define STEAL_OPTION(option, field) do { \ +#define CONSUME_OPTION(option, field, action) do { \ if ((entry = av_dict_get(options, option, NULL, 0))) { \ field = entry->value; \ - entry->value = NULL; /* prevent it from being freed */ \ + { action } \ av_dict_set(&options, option, NULL, 0); \ } \ } while (0) +#define STEAL_OPTION(option, field) \ + CONSUME_OPTION(option, field, \ + entry->value = NULL; /* prevent it from being freed */) +#define PROCESS_OPTION(option, field, function, on_error) \ + CONSUME_OPTION(option, field, if ((ret = function) < 0) { { on_error } goto end; }) STEAL_OPTION("f", format); STEAL_OPTION("select", select); - STEAL_OPTION("onfail", on_fail); - STEAL_OPTION("use_fifo", use_fifo); - STEAL_OPTION("fifo_options", fifo_options_str); + PROCESS_OPTION("onfail", on_fail, + parse_slave_failure_policy_option(on_fail, tee_slave), + av_log(avf, AV_LOG_ERROR, "Invalid onfail option value, " + "valid options are 'abort' and 'ignore'\n");); + PROCESS_OPTION("use_fifo", use_fifo, + parse_slave_fifo_policy(use_fifo, tee_slave), + av_log(avf, AV_LOG_ERROR, "Error parsing fifo options: %s\n", + av_err2str(ret));); + PROCESS_OPTION("fifo_options", fifo_options_str, + parse_slave_fifo_options(fifo_options_str, tee_slave), ;); entry = NULL; while ((entry = av_dict_get(options, "bsfs", entry, AV_DICT_IGNORE_SUFFIX))) { /* trim out strlen("bsfs") characters from key */ @@ -194,19 +202,6 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave) av_dict_set(&options, entry->key, NULL, 0); } - ret = parse_slave_failure_policy_option(on_fail, tee_slave); - if (ret < 0) { - av_log(avf, AV_LOG_ERROR, - "Invalid onfail option value, valid options are 'abort' and 'ignore'\n"); - goto end; - } - - ret = parse_slave_fifo_options(use_fifo, fifo_options_str, tee_slave); - if (ret < 0) { - av_log(avf, AV_LOG_ERROR, "Error parsing fifo options: %s\n", av_err2str(ret)); - goto end; - } - if (tee_slave->use_fifo) { if (options) { @@ -405,9 +400,6 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave) end: av_free(format); av_free(select); - av_free(on_fail); - av_free(use_fifo); - av_free(fifo_options_str); av_dict_free(&options); av_dict_free(&bsf_options); av_freep(&tmp_select);