From patchwork Tue May 18 16:03:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 27831 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp516159iof; Tue, 18 May 2021 09:03:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0NH5zXYJvwE8GRdL9CO6NUkRAXSRgozxtOOSZzqj6pz54AuD+JjAWZFIiroizuqcCz7yr X-Received: by 2002:a17:907:7629:: with SMTP id jy9mr6954325ejc.34.1621353831376; Tue, 18 May 2021 09:03:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621353831; cv=none; d=google.com; s=arc-20160816; b=t4/4poHfPWeqhNiTmCEwjjp4RdfbcBrrkZkZjaOXb0O1AMesAy5qKJx37ph55KPS0f nDusuMy78QXLdmIlPBSlZ5KlECEr7Ah3lT2iTtw2oiE2n8AGx0pNxKvdVcm/sL01QEMH 5rZB5gG+iZmr3j2jyUU3M3lUC0rAOUkQktuMzi2zcw9XqxdwAEe1cK+SdRUxwxCFZhHv mRRKqYVArlIcOrIuEjBOkNn4aS/3fNRv2aeWswx1XsV4hn6HzEWONX7CLyMGc9zkHdOZ OvtgHkIlhAJ0USXzIgSRXGoWWcwSWRMaf60TdmgGfSFWk9e1Enr93qK9X9AE2prTlYY5 47oQ== 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=l1BtwzUUUdY+KJF89ZMSt0Ym2b4gK5Za1v8eeDrxFJI=; b=d9OxeyJaZA/aKCe7AuxMg9JTPAMFXvlB4V+RK/TeM9a8ONvyR2d0sDEKOdHCELCpLS cYIGsfsrCySrV7DDz97zVuXrcs0NpTS1R0Vqu/BSztLNsx/46yH4zDyZ0sgzWCLJ0ERI BhlQ7Jx6mB/+WDIwu2uGcaikOGHm+I0x5PYn0ma/HaUqubHu/hIyU3edSzK7urCipEu4 NCw8nj6T3J1cF0NGoUV7yzTGSbSwIdWuv1wL5+UQ+vBudxJ5x5vBi0XPEhDv3n+lFCzz 2r0P8MWgsGvSJu3J4tyQcc+Pyvo9rOlgEohWpcj82HPagZCu0jL+uCKnDPQCGCsmJ+9t dnDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=xTEqDYPy; 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 y3si17052387ejo.374.2021.05.18.09.03.47; Tue, 18 May 2021 09:03:51 -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=@foxmail.com header.s=s201512 header.b=xTEqDYPy; 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 F223C689B62; Tue, 18 May 2021 19:03:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-137.mail.qq.com (out162-62-57-137.mail.qq.com [162.62.57.137]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C58D3680A7A for ; Tue, 18 May 2021 19:03:34 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1621353810; bh=xF/8GRfhPSWNW+rui4PDP3o29ebg4Qr2AEEC0KPua+I=; h=From:To:Cc:Subject:Date; b=xTEqDYPyz4akbCru1rnfQBJBBlz3taMwRF9JwNDJRVos8r8j7pKdYcIKF04+nmdKr OHmCbjWm/fYwkEHsTh/ZNIgxzNLEqVKWDOycW6i6DDbcedvTtOCPCqRx9dfw36poC0 x2IpymQVv/JODvOHZQoljKDKV0jtvkfEmDIUMnDo= Received: from localhost.localdomain ([119.123.135.161]) by newxmesmtplogicsvrszc8.qq.com (NewEsmtp) with SMTP id DD146F4; Wed, 19 May 2021 00:03:29 +0800 X-QQ-mid: xmsmtpt1621353809ts9c8q1bc Message-ID: X-QQ-XMAILINFO: OH/+daVgfqZe2ovmMcTRzU0mWWXM1iTD/CMvPtEpagM9cBqFFnIcL+/rCtXalp f08hYNrXWIew77r5GNmzZZwOqBSPYf+gvOyD53mMzFTrE4kIqq8tdkBUDjxrImRCCU6ADuWm2MPO AmfTTQJl7GO6d3jLNZvcvvz78jf1xqnO3j9rLEHnEfWdq3ng5MCCtm+w/Tcs+uZJmn4nUez1nZgk fD+XG1iMn+r6WakuGg6Va/7qHI59ycPxrlNUqgibz1K4KNznco/vVOGu8X1ZGlpVjfjG81/7pxfm LGBcCGT7YgRGFoziWs0WOkVO8kRZuzocbZ9JWoLwDXJPUFrwhhxIKpcmo07EZQr1J/E/9LwcoNcp pyo/rflB3VKqp7YIftNPM3+sCu5RqhucKticr7lM9SMaf2pgVXtCYORdfzV752Ovr9IalOGN7bmP uCmYSdv+b2o8ZD2xrVnqE4TyrNwYO+6UBSLse4we7MBrl1VDROQkxARdGBEdUZx4Jl99YvlUPT8Q hG0rJ8Huo+h2cbljPzvoaCpd7Wqqwtn1uC379BxZOMGF3s4jeGEki1rcZdR2z4UWkovt2H3TQKVZ lAfyfPsclrUX1GnC+K9CMpwnDQhzqeQR1WWOKJSHiO2hw83FeCfRHEmm5lVd4312PD2z3VeTHGdF gvMkGygXrble6YrlmuY6jJp7MhYfA8oiwSwJLvvhcoclIsAGBXXOIcbbz7yfXOipBH0uJ03cKIi7 4P+128DLSOrwPNiA6uDjnEtTjQpFxavdg7aJM7S0KrvQmTa4ioxxI8EzJAsBmjvlZYIapyaVccs0 gPxXC9DfpBhQ== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 May 2021 00:03:20 +0800 X-OQ-MSGID: <20210518160321.27698-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/libsrt: support bidirectional transmission 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: 9cycjY/2mspI --- There is no good use case yet. Patch 2/2 is only used for test. libavformat/libsrt.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index c1e96f700e..a05921d9f0 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -163,10 +163,17 @@ static int libsrt_socket_nonblock(int socket, int enable) return srt_setsockopt(socket, 0, SRTO_RCVSYN, &blocking, sizeof(blocking)); } -static int libsrt_epoll_create(URLContext *h, int fd, int write) +static int libsrt_epoll_create(URLContext *h, int fd, int flags) { - int modes = SRT_EPOLL_ERR | (write ? SRT_EPOLL_OUT : SRT_EPOLL_IN); - int eid = srt_epoll_create(); + int modes; + int eid; + + modes = SRT_EPOLL_ERR; + if (flags & AVIO_FLAG_WRITE) + modes |= SRT_EPOLL_OUT; + if (flags & AVIO_FLAG_READ) + modes |= SRT_EPOLL_IN; + eid = srt_epoll_create(); if (eid < 0) return libsrt_neterrno(h); if (srt_epoll_add_usock(eid, fd, &modes) < 0) { @@ -178,14 +185,26 @@ static int libsrt_epoll_create(URLContext *h, int fd, int write) static int libsrt_network_wait_fd(URLContext *h, int eid, int write) { - int ret, len = 1, errlen = 1; + int ret, len = 1, errlen; SRTSOCKET ready[1]; SRTSOCKET error[1]; + SRTSOCKET *error_ptr; + int *errlen_ptr; + if ((h->flags & AVIO_FLAG_READ_WRITE) == AVIO_FLAG_READ_WRITE) { + // cannot detect error in this case + errlen = 0; + error_ptr = NULL; + errlen_ptr = NULL; + } else { + errlen = 1; + error_ptr = error; + errlen_ptr = &errlen; + } if (write) { - ret = srt_epoll_wait(eid, error, &errlen, ready, &len, POLLING_TIME, 0, 0, 0, 0); + ret = srt_epoll_wait(eid, error_ptr, errlen_ptr, ready, &len, POLLING_TIME, 0, 0, 0, 0); } else { - ret = srt_epoll_wait(eid, ready, &len, error, &errlen, POLLING_TIME, 0, 0, 0, 0); + ret = srt_epoll_wait(eid, ready, &len, error_ptr, errlen_ptr, POLLING_TIME, 0, 0, 0, 0); } if (ret < 0) { if (srt_getlasterror(NULL) == SRT_ETIMEOUT) @@ -435,7 +454,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) if (libsrt_socket_nonblock(fd, 1) < 0) av_log(h, AV_LOG_DEBUG, "libsrt_socket_nonblock failed\n"); - ret = write_eid = libsrt_epoll_create(h, fd, 1); + ret = write_eid = libsrt_epoll_create(h, fd, AVIO_FLAG_WRITE); if (ret < 0) goto fail1; if (s->mode == SRT_MODE_LISTENER) { @@ -479,7 +498,7 @@ static int libsrt_setup(URLContext *h, const char *uri, int flags) h->max_packet_size = packet_size; } - ret = eid = libsrt_epoll_create(h, fd, flags & AVIO_FLAG_WRITE); + ret = eid = libsrt_epoll_create(h, fd, flags); if (eid < 0) goto fail1;