From patchwork Sun Dec 11 15:17:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39677 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2945246pzb; Sun, 11 Dec 2022 07:18:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf6GLPZ/nlogEF0xJCOomK35ozGmi4ie49FVvNK5Jt+0tkynjbaxcGWWGNovGjAHbLuEcW7b X-Received: by 2002:a17:907:c78f:b0:7c1:4e8f:df2f with SMTP id tz15-20020a170907c78f00b007c14e8fdf2fmr7757438ejc.17.1670771902897; Sun, 11 Dec 2022 07:18:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670771902; cv=none; d=google.com; s=arc-20160816; b=CvUTKd+Dpp40HjTQb2XFuhftrqvUWyzD46P9PyhPuCgWv4RDWmg3+FZ/sKsClFuQmQ CT/Ese92TKYDSxxe/AEd6GFm3W+V/Lti/5+khrMa4owZg7MovzLD5TdJsZGbPo3DrEuW IvSoYIDWCSO6JAzS+8IuCSWig4GtD8qiDnFLp4t8GHzmbcfg9a6RIlFXnT5+3z/PspX7 meFFAnhpfH4TvFaxTiogk/fsU3+lI7vCIZVtrERWhShWmnSjMCv6HcFotO/JsuAH3v6o 96YMzYXNh2UQrwXNoW6LrPWs3ud1Doet8XK1pTk/tZGbD/z0LgjCczx4/d90KM15GavO J5KQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=9nU4/aMfCADmc3zXVCVU1Zij6r8qwE4d6Mc743xV8VQ=; b=Qg88raFcwb39EFSNrjY9AvPyMy3fydZZJUrF46cECWu9uLRFKr9qOAB3RqHnXyQ/u/ VWuj5ElyRVEuCQPKkbYqEHcr3Fu7XPS1aSDluIdf2S5y6+u/1+Pf+2byQLZdK0HnxGTv MCBD6uHDmQh2eXN4/hL1/hrvV7YEJjPkxSfM1OILWB98mt3+2vKF5jgMik/w8vnyK7Oy DGfKtbfqhMc861g+7Wx5FcmLtWiEsyHs9vt21xZCoIV6fQMeY5zNoQXX3/CcfRxs+OxQ oUr5FVPF5GabjxXBjzKhtBpjAjXG3fJNFo+FvfRyH3tiEG0u/VBm4fC4m+B9BbgQj8w8 NAlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=jsVx97zq; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id js8-20020a17090797c800b007bfdadb58e7si4519839ejc.546.2022.12.11.07.18.22; Sun, 11 Dec 2022 07:18:22 -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=@foxmail.com header.s=s201512 header.b=jsVx97zq; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4033868BDFB; Sun, 11 Dec 2022 17:18:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-202.mail.qq.com (out203-205-221-202.mail.qq.com [203.205.221.202]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3336168BDDB for ; Sun, 11 Dec 2022 17:18:00 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670771875; bh=SKzCkOMzTaxmBH2DhEvquyiF/x84cVtZxC0t2SbBnjg=; h=From:To:Cc:Subject:Date; b=jsVx97zqR9ogkgfjfhV2+l/wsgjsQ/IxIP9PHyE2QKN6Nh1C9LU9IrM59R1nDJkoU SD22LRpnLpO/nggYv60H+qH5mWkr0pLd5g5rSoCLUjIAb+CWSSwlQuYs8/ultSU9UZ /8OOD+Iw4FBpOUDBTUSzdxJCxSkaG+C9p5iELHBE= Received: from localhost.localdomain ([113.116.30.206]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id 4762AC8A; Sun, 11 Dec 2022 23:17:54 +0800 X-QQ-mid: xmsmtpt1670771874tdq8w47ck Message-ID: X-QQ-XMAILINFO: NMmJpeSXIGQN8B3mNDVak5x4GCuunWMMaltPWGPMxEQJkE1yZi+QHgG6gQk88l WvHN9K+h3lW5kzsyNY9WZW3qW36OB7VAWLNjsDehf94X98HLz8hYc5OeWCClc969xQzestiXTI7n /0UAsDJREPZPLJKqUcIG28kiCwd2UgHTf6EBHRW5D07oW7mHfAyCppLDnuhwOaAl3qj/pSUfPY1e 7SwNPmZhMgM2+yjUggaGf2fw8F/34LWKxj9oeyhdYdR53DJCs22yUmF6xN2Dkh1RalXlGUDhmeGJ tWuGKctOzw8cyk+/yiSN+laVTgPcFxXqj0bu7EhQDg05Zxi+4/nkUQ88V6klCnkvJLguohsqWOYD rgcrqcyZVSsmr7qNVaeIVVbb2xTKNboL92OmJm35Ou9QQHNwMOVxsZdJk23vuq6kHi5ZtPA806UE f3qnxQyxBk0vfbnORpoPc+bctk4ma5ppJ6xtBxOX6niKtsQpa15aGOyXh7PW/mL+etcp+Kk/5EE5 7agzmsyqnduk2/WkCGSE9iUsOXgTMQbJgaIbanNJPWIYIfvtvej2kQZxBD9+q/asC0zyBqATTSRF IEyOv4O5J+/Q4c1PzHdm2Za0hFK5fOlslVV5qH4SlZkRPddK7Z2ggBpTce695rCVk5jxNs3nw8m/ U8zbQBAH1zY2ij0YuIfDGemD1ii2wjwBHAR9oFNuseeDWXnmsNiD4Wv2takVNXyy6Hc08XwF66HY rniHmoDA8CDwGmCyEVhx6wHKvLVG0Nj/JsY25dHbx03ESXIJI8b6F8Iwb/4uIdEb27D7IKoTbYzm NRb+lBTz4KZ/a+zkuApowLvRmTNTmltQxzYuQS7QlpbyZ89W5X9KMno5RM7aC7FD4a8qrHB2IxrN /32YKYwFoXkA2yp2BpFQO8ehVeADqQe0L9QnPLBAE1OPaUY802fRThVqq2e3InbfHjtAyEUkq2G1 goS4qlqpcPWA3397xlDQ== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 11 Dec 2022 23:17:27 +0800 X-OQ-MSGID: <20221211151729.120662-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/3] avformat/file: add fd protocol 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Tal0qQQvbw4a From: Zhao Zhili Unlike the pipe protocol, fd protocol has seek support if it corresponding to a regular file. --- v2: dup the file descriptor for safety doc/protocols.texi | 24 ++++++++++++++++++ libavformat/Makefile | 1 + libavformat/file.c | 55 +++++++++++++++++++++++++++++++++++++++++ libavformat/protocols.c | 1 + libavformat/version.h | 4 +-- 5 files changed, 83 insertions(+), 2 deletions(-) diff --git a/doc/protocols.texi b/doc/protocols.texi index 5e9198e67c..d9f2d2dec3 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -275,6 +275,30 @@ For example, to convert a GIF file given inline with @command{ffmpeg}: ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png @end example +@section fd + +File descriptor access protocol. + +The accepted syntax is: +@example +fd:[@var{number}] +@end example + +@var{number} is the number corresponding to a file descriptor. Unlike the pipe +protocol, fd protocol has seek support if it corresponding to a regular file. +If @var{number} is not specified, by default the stdout file descriptor will +be used for writing, stdin for reading. + +This protocol accepts the following options: + +@table @option +@item blocksize +Set I/O operation maximum block size, in bytes. Default value is +@code{INT_MAX}, which results in not limiting the requested block size. +Setting this value reasonably low improves user termination request reaction +time, which is valuable if data transmission is slow. +@end table + @section file File access protocol. diff --git a/libavformat/Makefile b/libavformat/Makefile index d7f198bf39..1452216e29 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -647,6 +647,7 @@ OBJS-$(CONFIG_DATA_PROTOCOL) += data_uri.o OBJS-$(CONFIG_FFRTMPCRYPT_PROTOCOL) += rtmpcrypt.o rtmpdigest.o rtmpdh.o OBJS-$(CONFIG_FFRTMPHTTP_PROTOCOL) += rtmphttp.o OBJS-$(CONFIG_FILE_PROTOCOL) += file.o +OBJS-$(CONFIG_FD_PROTOCOL) += file.o OBJS-$(CONFIG_FTP_PROTOCOL) += ftp.o urldecode.o OBJS-$(CONFIG_GOPHER_PROTOCOL) += gopher.o OBJS-$(CONFIG_GOPHERS_PROTOCOL) += gopher.o diff --git a/libavformat/file.c b/libavformat/file.c index 6103c37b34..b8725c1f48 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -109,6 +109,13 @@ static const AVClass pipe_class = { .version = LIBAVUTIL_VERSION_INT, }; +static const AVClass fd_class = { + .class_name = "fd", + .item_name = av_default_item_name, + .option = pipe_options, + .version = LIBAVUTIL_VERSION_INT, +}; + static int file_read(URLContext *h, unsigned char *buf, int size) { FileContext *c = h->priv_data; @@ -412,3 +419,51 @@ const URLProtocol ff_pipe_protocol = { }; #endif /* CONFIG_PIPE_PROTOCOL */ + +#if CONFIG_FD_PROTOCOL + +static int fd_open(URLContext *h, const char *filename, int flags) +{ + FileContext *c = h->priv_data; + int fd; + char *final; + struct stat st; + + av_strstart(filename, "fd:", &filename); + + fd = strtol(filename, &final, 10); + if ((filename == final) || *final ) { + if (flags & AVIO_FLAG_WRITE) { + fd = 1; + } else { + fd = 0; + } + } +#if HAVE_SETMODE + setmode(fd, O_BINARY); +#endif + if (fstat(fd, &st) < 0) + return AVERROR(errno); + h->is_streamed = !(S_ISREG(st.st_mode) || S_ISBLK(st.st_mode)); + c->fd = dup(fd); + if (c->fd < 0) + return AVERROR(errno); + + return 0; +} + +const URLProtocol ff_fd_protocol = { + .name = "fd", + .url_open = fd_open, + .url_read = file_read, + .url_write = file_write, + .url_seek = file_seek, + .url_close = file_close, + .url_get_file_handle = file_get_handle, + .url_check = file_check, + .priv_data_size = sizeof(FileContext), + .priv_data_class = &fd_class, + .default_whitelist = "crypto,data" +}; + +#endif /* CONFIG_FD_PROTOCOL */ diff --git a/libavformat/protocols.c b/libavformat/protocols.c index 8b7d1b940f..82cb1033e4 100644 --- a/libavformat/protocols.c +++ b/libavformat/protocols.c @@ -29,6 +29,7 @@ extern const URLProtocol ff_concat_protocol; extern const URLProtocol ff_concatf_protocol; extern const URLProtocol ff_crypto_protocol; extern const URLProtocol ff_data_protocol; +extern const URLProtocol ff_fd_protocol; extern const URLProtocol ff_ffrtmpcrypt_protocol; extern const URLProtocol ff_ffrtmphttp_protocol; extern const URLProtocol ff_file_protocol; diff --git a/libavformat/version.h b/libavformat/version.h index a7e5a9ac66..f5a7f579b3 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,8 +31,8 @@ #include "version_major.h" -#define LIBAVFORMAT_VERSION_MINOR 34 -#define LIBAVFORMAT_VERSION_MICRO 102 +#define LIBAVFORMAT_VERSION_MINOR 35 +#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ From patchwork Sun Dec 11 15:17:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39676 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2945170pzb; Sun, 11 Dec 2022 07:18:12 -0800 (PST) X-Google-Smtp-Source: AA0mqf5GhnysQNzXMIMqA8UyuyWoVj2gIF9nnt6IvC5DocBvleYvrkc+csZ5fAM0NGwH3KeLMO7M X-Received: by 2002:a05:6402:540b:b0:461:cc5b:2570 with SMTP id ev11-20020a056402540b00b00461cc5b2570mr10928629edb.1.1670771892352; Sun, 11 Dec 2022 07:18:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670771892; cv=none; d=google.com; s=arc-20160816; b=EpEgfw0F/h5XU+ANyQpK2o1lYNeon5X4opx6Vka3fmdIicvsqxN857dP92xsdiDiNM HtMqSuLZIlIBWpUTyuoLDA+gOFJ9UhF+0Pa0DhMWcfXQMWdjRQPuATQBCBxS0xg0/69o Jbj2lSkxZS3BV8MffSx1EYLd1G1+k3S/FFmNt6GXYvWmgLGu7p8uE0kt3me1mUrQOvDr q1TmxhPDFrdBaPL7EqsstteuorWLA36cKtaeubCnxf8nkhCfsXKE/x5u2JAQzp0Sv60h /RMx3mapQiGsXNwfEBQgjD71jpkovVaQ8pbUa0rzZpJvRNdmDN60ygiftphz+V4MWs6E atPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=eD0PbkRL77GAZDIvhmBPzT2YS7Fynh9EguA1ei2Du98=; b=PKgXevMd/Za1tOZoxTHdyM7ZvmGsAGQNmVHN7OBukM/SHdrb9pjYHQYR3zdnM5xzlC bG7J2JNT8aQffN68/onSBJWXvtUqvluWtL1c6hylO8CRzCi9Qi8oSeQSsQT8hOhha6TG aTDuzs6Ely+/GQMhBQOBKkRzK+wncWwKCnz0k5/MHBpi2O6B6+LwL80/cHK3MosuvXRu 0eVaxSg/rH7w3uk17a2NhQyQyc/JnlAAj3YZ5aRmCeWyDzpKQcCjjAZdv5YhMGVUYW8B xr4kevG5rP0EUgNjXv1ziz5CU15HDAsZwwOHASOHYSBA1fV9r8YyTCX4yBGGf3QnALxl lAfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=RnBAK7JI; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g7-20020aa7d1c7000000b0046af5c0f32asi5435776edp.37.2022.12.11.07.18.11; Sun, 11 Dec 2022 07:18:12 -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=@foxmail.com header.s=s201512 header.b=RnBAK7JI; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 294EB68BDEC; Sun, 11 Dec 2022 17:18:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F1B368BBD2 for ; Sun, 11 Dec 2022 17:18:00 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670771875; bh=xheLIgy+MOojfmZWD4y3XqSbFTH2aROiRtVNEqX270E=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RnBAK7JIAREVQjp1+4c9kPVjMdvi4zG6zshbu/83B/wa1F5SF0z9OFdrWhZLzQNZB Dnui6EOfC3G7YSLpKpHm2aZ7lZcBoDSxnxlQDKOgxIV9sqvEjKr0PahkaXC/KHPN8e DAysVAvoy90QJqYpn9rNhtQJstiw+Ufybd1oQyIQ= Received: from localhost.localdomain ([113.116.30.206]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id 4762AC8A; Sun, 11 Dec 2022 23:17:54 +0800 X-QQ-mid: xmsmtpt1670771875tjlf7s11w Message-ID: X-QQ-XMAILINFO: N26DAMVpW7UEJBvx+nfEk/3q4gxSr84m8e7uLYMdH0b4Wufa+/0/qm3/yqikK4 3IpQ7m7H6hgOPyL+2BVlwx2zg2MjfPqyYORiX9jLw8QNsQXtu7WsLnVVqdjEEC5tkb6oqceD74TN 9RtERIjDGrR63NVOZpd7qyXkkKhXYDZtftAqsGMVuTmrJYyLGVLmBi+XDjmFZUIjStTdtmAGUy6I qGGJiPTXQ82/tt+Eks3DEIAVQSPNyUuOZqyiv/B/0USOEj+t0Uoo5crX3JR0q1qSaAiyYKDPHCWw RfWuspDrg3Lm/iA34HK+Llqy4jWJazdBJWpqBDS+EkiO/Gd87S/PgUL5eo9DwGWWWVasFNlYDFce FkWqkLmKOuJQw0wONR7Pf47agc8tWhlxEqZB8Ocs6cu07jPzcDhQtvabwOITzFWitnaGLvnh4YOI MxwMxvijox5ONdxvsrtzp8WzMxN8BWrP0na2z995sf/U6sWm3wwkMasdbGyNeKEVYcnsFhF8kOdo s4j5g6D5mG1uVj7ibTtzO7g6jlbpvCajDQ1Co0jdJLnjiepHuZMCjz901abTNKqAWl/CT7B4a2Tk FgB3k66cxmSSNkYndxbij6AZ1yUR8sPYAN2YQF5g6hBjDcoBsRJTAdGIekCwCGZ8MeS/4XDxN304 sq+cItwSYMprR0HpxA3m/J2FTH9xXYPFfB+zZ45RvNCbFHjySeGw/DI2ybgpGxfihqa3YcwlQXI3 n/X9qoYu8OfCwS5hYDavH5sQeQh1T9lZ/c9aNLVxtTGAelkpKHboCIpHRzXg8HJKSjtPy0aWJvTj GxMnmf7k+HA5i6ctWgLk4pb1tgaE9ZB8uc699yUJKZztyh8RRJ53HrGw/qCQPN06wQcGCxjXQhOT IG3DKhnXDqMwy2h4q7BaKM2Q/z7AT8sA2AcEpdBeRN3RMyvn6myqpMfwcquUB+wjmaiu0cYJ9SMZ EKt1pNg4PyH+Fuxcx/WA== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 11 Dec 2022 23:17:28 +0800 X-OQ-MSGID: <20221211151729.120662-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221211151729.120662-1-quinkblack@foxmail.com> References: <20221211151729.120662-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/3] avformat/file: dup file descriptor for pipe protocol 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: MDmDYw/G30Ot From: Zhao Zhili This can fix read/write error when user close the file descriptor earlier. Now user can close the file descriptor earlier to avoid file descriptor leak. So it's safer in both way. --- libavformat/file.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libavformat/file.c b/libavformat/file.c index b8725c1f48..f7ebd52433 100644 --- a/libavformat/file.c +++ b/libavformat/file.c @@ -401,7 +401,9 @@ static int pipe_open(URLContext *h, const char *filename, int flags) #if HAVE_SETMODE setmode(fd, O_BINARY); #endif - c->fd = fd; + c->fd = dup(fd); + if (c->fd < 0) + return AVERROR(errno); h->is_streamed = 1; return 0; } @@ -411,6 +413,7 @@ const URLProtocol ff_pipe_protocol = { .url_open = pipe_open, .url_read = file_read, .url_write = file_write, + .url_close = file_close, .url_get_file_handle = file_get_handle, .url_check = file_check, .priv_data_size = sizeof(FileContext), From patchwork Sun Dec 11 15:17:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39678 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2945325pzb; Sun, 11 Dec 2022 07:18:32 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Gf+9SxCDyzTURHBFwjjA70s8es1Dl8Wev0JQ4Fje/RJfLLnKPCqJLfloheYM6OjmnJcYN X-Received: by 2002:a17:906:f747:b0:7c1:bb5:f296 with SMTP id jp7-20020a170906f74700b007c10bb5f296mr11416581ejb.57.1670771912156; Sun, 11 Dec 2022 07:18:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670771912; cv=none; d=google.com; s=arc-20160816; b=EDUFlSB6Nq0AbXcQvnotsaE47uhF7a+SoQPupcUIx+5OxgWoIeyP+mYqLlQNe/tr92 xvUpLO70+63rmItGI3oCWzLa2dSau6j3aB3ZTG+aCLVAkcqHYt5eW+mMu8F8l6zhOQcN w69gSRqahpcN0ZXK+9QyjRh3+JtiNn66pyhmmimckiJ+gfs0O4tsSjeVeDnhTAAvk8W5 Szk1BtwGMhYmxU261y1innjduPrqbcB7JdJL9EnKlvHv1yMa+hhxfKkVVdPVcP8X9dC6 t7ZYwL16gktvKHoivqv5N2dSR44E1Zt7lBrMUJ/qFWSEHXSb/MyiWow7m92iA/loxBtx ytmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=LejcXYGuCo3UE2X2Ni/PjsxIVKTKPJ0ipY5JxLt00YI=; b=HG+EwdBEt/jCZXZq1Vp+Sq0/sqsJvrjo3GXKxB6lCNY5uOYwtTmpFhn5hOf+RkLDgb W1wklPmxEbLsiaFA4AHMt4Q+wpavnCtZHSGvr8UCAeEAIGGozwVWLrhtHrRCdwv8+YDa NsVoGTncFNgWtvYz1MxS3xzPDPkxTdU+r3eSzesPuERsk3IpH+1cjyiPHK5uexcohysx rWV6qNcC8zdsHv3z5LUdGtFwD/9pYHh+3aPjZsBwWQ9WuurJT+g9RVQXbEcDOgLjcfXI BXtwOcJv9UGj8ZQedN5ffrMl83J3zaIjSR69Wnjk6D69Q4Zu6NWsDPRun/U+OOk+/wMY C29Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=FJOmPD0p; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dt18-20020a170907729200b0077eca9fa444si3780959ejc.187.2022.12.11.07.18.31; Sun, 11 Dec 2022 07:18:32 -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=@foxmail.com header.s=s201512 header.b=FJOmPD0p; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4B34F68BDE8; Sun, 11 Dec 2022 17:18:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-209.mail.qq.com (out203-205-221-209.mail.qq.com [203.205.221.209]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0D84668BDF5 for ; Sun, 11 Dec 2022 17:18:02 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670771876; bh=ZwpgJOQmGvytsysBieYS7BiWfMRe3t9PdN8fi13P2aE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=FJOmPD0p7SfHRZv3DEtP9YTNUQsdSYcSXduMS15de8GKZwsi0MdQPZomtbbDMT7rO BDoindr0saCOYfBOfG90ZhxG3Kr0XivW4o1RPGTy2JMjKIOGjkN3Tl4PWGipCnxzhu erCcvHBzcf2Tl1H8WodX+Ry5zJdkI4TQGZqu7Kbw= Received: from localhost.localdomain ([113.116.30.206]) by newxmesmtplogicsvrszc5-0.qq.com (NewEsmtp) with SMTP id 4762AC8A; Sun, 11 Dec 2022 23:17:54 +0800 X-QQ-mid: xmsmtpt1670771875tu1un3k8s Message-ID: X-QQ-XMAILINFO: M5WvXNp9ZPrQUB9NMOh6uzmr0fmEpy35zbohdi4DUZkVmpfSmw4PvzpddjLeUO y2vkRqZFWOYQpAYQe+6Tc00e8mxGA1lEp6hZ6VpONR94CyHPrO93hxbvNk3lSO4cpNPS4UBukxT3 VAyOYj2zZezEr2cIMhQ3Ma5NG2I24Er+ja4rALgGL39yhsyQf5SJBwEO2e9BQVws0j5i8JSkamn/ lcxmBQXJ3sZNSG2cc2R5fMsCvHFqqiWkjxGesZbNdn+IxSfYI428y/62txdGmWR/1VpTOIbccBYe om+nLc2GECi/TNDRweX4BgsjMal79C2NlvURdBp/B7MYv6ZoWCb40+mygDpNV+1WRVNvPm3k5j2a MdF0FyYtuaFxKeHZtycJ2oLY95DFT2zfx0QgOzk/YBNSvF2fcUe0TrFNdAg3Yr5D1WXayx/ufM3X ujF4XYl7TQzZZm+YKr8KrUoCLDMzhOXzvYTtmqz+UyymneXnwqxrA4ZfMcpYRthYzy6QvmKgDYgY eQ8Jcu1vh2JxW3F6yIxlxv8UE2iJ225VS0Mft61VGkyAsOq58bO+CVLInNUJJ8PLzqfMd8RBlnmC lkGEmQCOxVwwp7uSFtb/Sh213T4PWwEbcvvY9HkJBq+3T05ELqEF6pR5tNCpF97RMNIyKa+Q7Xeo JQWICuNiwJJo3hoo+1vGlzyRl2nyVYawobfrNY+eXxk/TkCEYpUR2WDNrbFtpbYm/W0Ax8cfsXxP YMGkeRi4P4Ov/5k+PnTmxKhfXTC3onfTumMLNnK0RUn1K1iPFeqQCf5BD0WBgGAzYJCr/PlWry2g PrpGh9TLQmdCcrdzP3hYNVawWW1icj0p3rx+urAJfPBcnAcamU0LMciqamx7G2rIsloZ+k7H2Kfa vorxH9SCH5nGQU5YgCW0N930hE6NOVkfTSZp7dm4T+8A9y+5xPXVy9vetu4JNEwAYBLL5CHaLPRe +hrX+eVoiqagy0jT5lfy3bzkevOoYw From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 11 Dec 2022 23:17:29 +0800 X-OQ-MSGID: <20221211151729.120662-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221211151729.120662-1-quinkblack@foxmail.com> References: <20221211151729.120662-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/3] fftools/ffmpeg_demux: fix stdin interaction condition 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: a8b12NfvPsLN From: Zhao Zhili Disable stdin interaction for pipe and fd protocols only if the file descriptor is explicitly or implicitly setting to zero. --- fftools/ffmpeg_demux.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index e845e6784d..57695c25a3 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -885,7 +885,10 @@ int ifile_open(const OptionsContext *o, const char *filename) if (!strcmp(filename, "-")) filename = "pipe:"; - stdin_interaction &= strncmp(filename, "pipe:", 5) && + stdin_interaction &= strcmp(filename, "pipe:") && + strcmp(filename, "pipe:0") && + strcmp(filename, "fd:") && + strcmp(filename, "fd:0") && strcmp(filename, "/dev/stdin"); /* get default parameters from command line */