From patchwork Thu Oct 5 14:26:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Kucera X-Patchwork-Id: 5426 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.76 with SMTP id m12csp2099399jah; Thu, 5 Oct 2017 07:33:44 -0700 (PDT) X-Received: by 10.223.172.134 with SMTP id o6mr5058499wrc.259.1507214024507; Thu, 05 Oct 2017 07:33:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507214024; cv=none; d=google.com; s=arc-20160816; b=HkYYBJqBppIgTaJDOJi4RMAibT93eBdMWTw54uwlTMiKO3MciOMxEkodHrlB07pAmm LFVAV+YX/RuebOcfjnzhopGeJd1wvsgj8Eh1CZGWS09JiaGaLm7NUqQbL7wbqUL2YZHC YQTFwnGEbGstHEPxsyclOO5kKI1kEk3DkxMOOZ9jo2gr5IB6qUnCSBUwf51Vv9/c/5jk 1KVAiD9S0A1E+BkKOuXj3I3lPV7RCSsWLkLn8hSaasXNwDXXirOXFgnjQA4U9YIpmccJ QN6Uu478D+XEWUYag+3bZsOl4PpOpKL6mu/xX0rQ37LNUDzXiRWHpl/7IYgOIyX7hC4j PSWQ== 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:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=BTCWWmFktVcNrE/+rXwmBdBcycQFDuIh9AT6vLaKWR0=; b=XfqguHYxNOaot8ozvBeawiHA7wVi83osDYvx1siol6JrpjP6/dzXFbztwI/y0l6wYg O8cfumJaxC5pxrxjfJQtqHxYK0LEZ30skbEc3ljWNZ2+OmSqoBTdJs9saYbPIKlilzjN 2VU8Bk4taJkjPzutMFYjLGwgQ1NlrNikYerLojPcgQOPqGds7MVkr638wtDOWXj4qt9x 78ktCtMfj/rS4foqHTvqXN5x0yaymqOaCdMQVoxG5mMwL/mSFxQXzSjX9W8rO3EpfQnY O/kQ7zxJht799A+l07upXQiwkNjfb3A9E9dJ0ShuLS6FZo16vlrQ8LOKomeVu2TX1gr3 pqBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=H8HyIFNw; 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=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 k12si15620790wrg.323.2017.10.05.07.33.44; Thu, 05 Oct 2017 07:33:44 -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=H8HyIFNw; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CF7D768A30E; Thu, 5 Oct 2017 17:33:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 24E7468A104 for ; Thu, 5 Oct 2017 17:33:22 +0300 (EEST) Received: by mail-wm0-f68.google.com with SMTP id l68so2610767wmd.5 for ; Thu, 05 Oct 2017 07:33:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=8mo2WsGU+nL09T60xrmO6P9zScetJ7lHQgCuOMU6NUc=; b=H8HyIFNwzYwbv5qHaJrlgvWkBDtLSHEcx0gWaI6XqYACvMc3OgOId863cUkwatzxJU SkMELCle5LvShtNxBwyBruWtm1yJC8087vrZoZr6aayhNy0NFW5EPFpYOIzEsd6avfZ8 XCtj8at+gCtu3j/Ak6Nw1kgcH0EIMFswepD4kGybKbwq67pxWMjbKupzRMjUW3bJfNso 75IxP707qHFpvtD1bF6zvzzY9RLsfV4kUFiz/44otLjU/Q1DN4x6SBC+nlJ9ONX7Jk5w kcgACNwi/vsdD0sjD+g87bCUXN8hZVx5KQafepRmtAkw8FCYFFQn2cmVI/XHdq1jpbdR SECw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=8mo2WsGU+nL09T60xrmO6P9zScetJ7lHQgCuOMU6NUc=; b=HFFfwXyjeU8zN88yU5U2p3S2Ys0gGqKSfgeCujrjVV4qjb+FHqkz8eTuOuHHQDRMsh tcSDJ0tAndT4AIkA+OMImZy8pWlkaT7aVTQvlqtMhpJSRhfSOi1/72Z6rNs1D/Dk1htN kpLcv5ojujPZQuQD+19anlmqbcp9RKqZxQhdo8LKka2gqWdh7rJAtIjkDn2rgrDBc6jC kqnyGmVpApmk9ZLkMzKBLvmINdB4wtM3bLs7w85KOcaPGWf71nCi7Pk//plShy5rAkST 5mnIzUBSKJzwYydOzfK+Kv7xDdtaYVf8Ukubq0L/GtXDMI5feIjuEg1Z1m61AlsuFdyh w07Q== X-Gm-Message-State: AHPjjUg2Rb4K6XO672gwQnojkjxBkpBk9kpz6dieX7y1zdu5KNVzE3C4 U/RrmBNWJNQu4MVU584W3o/3oA== X-Google-Smtp-Source: AOwi7QAbw1CdRs94Pg1LN9ZNQ6yGynTy6zELeSfdihCnvdEFj9uN3CY4EE58PUvQgwcNB3S23UL9/w== X-Received: by 10.28.50.200 with SMTP id y191mr18724582wmy.74.1507213600082; Thu, 05 Oct 2017 07:26:40 -0700 (PDT) Received: from localhost.localdomain ([195.122.211.130]) by smtp.gmail.com with ESMTPSA id w126sm18080425wme.25.2017.10.05.07.26.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 Oct 2017 07:26:39 -0700 (PDT) From: Daniel Kucera To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Oct 2017 16:26:31 +0200 Message-Id: <20171005142631.23899-1-daniel.kucera@gmail.com> X-Mailer: git-send-email 2.11.0 Subject: [FFmpeg-devel] [PATCH] udp: added option to ignore empty UDP packets X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: Daniel Kucera MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Time to time some devices send UDP packets without payload. ffmpeg previously exited on receiving such packet, this patch adds an option to ignore such packets. Signed-off-by: Daniel Kucera --- libavformat/udp.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libavformat/udp.c b/libavformat/udp.c index 3835f989c4..15455dbef5 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -88,6 +88,7 @@ typedef struct UDPContext { int is_broadcast; int local_port; int reuse_socket; + int ignore_empty; int overrun_nonfatal; struct sockaddr_storage dest_addr; int dest_addr_len; @@ -137,6 +138,7 @@ static const AVOption options[] = { { "timeout", "set raise error timeout (only in read mode)", OFFSET(timeout), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, D }, { "sources", "Source list", OFFSET(sources), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E }, { "block", "Block list", OFFSET(block), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = D|E }, + { "ignore_empty", "ignore empty UDP packets", OFFSET(ignore_empty), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, D|E }, { NULL } }; @@ -786,6 +788,9 @@ static int udp_open(URLContext *h, const char *uri, int flags) FF_ARRAY_ELEMS(exclude_sources))) goto fail; } + if (av_find_info_tag(buf, sizeof(buf), "ignore_empty", p)) { + s->ignore_empty = strtol(buf, NULL, 10); + } if (!is_output && av_find_info_tag(buf, sizeof(buf), "timeout", p)) s->timeout = strtol(buf, NULL, 10); if (is_output && av_find_info_tag(buf, sizeof(buf), "broadcast", p)) @@ -1039,7 +1044,12 @@ static int udp_read(URLContext *h, uint8_t *buf, int size) av_fifo_generic_read(s->fifo, buf, avail, NULL); av_fifo_drain(s->fifo, AV_RL32(tmp) - avail); pthread_mutex_unlock(&s->mutex); - return avail; + if (s->ignore_empty && avail == 0){ + av_log(h, AV_LOG_DEBUG, "Ignoring empty UDP packet\n"); + continue; + } else { + return avail; + } } else if(s->circular_buffer_error){ int err = s->circular_buffer_error; pthread_mutex_unlock(&s->mutex);