From patchwork Wed Oct 25 08:22:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas George X-Patchwork-Id: 5686 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp1551995jah; Wed, 25 Oct 2017 01:23:18 -0700 (PDT) X-Google-Smtp-Source: ABhQp+QbtNsSey1JIyP03c5XzTtVUPlVWS58qaDduSwYzyIS1MCl8BfyQMMU9BUYEza+X/CGIEvj X-Received: by 10.28.245.11 with SMTP id t11mr934006wmh.113.1508919798199; Wed, 25 Oct 2017 01:23:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508919798; cv=none; d=google.com; s=arc-20160816; b=FxSeJhcZtDqevIWeNtJujRsdNkB379tDgFQQEhcv1xdM7GIP65Lbjf5qlSskiTjOmO GeJEB3zI93xqYHJa+VfjQUo2gy11+zH9si79zPOrdGNYEEnf4i39TtHdSm8MKoakY2+s GB+gx5KD9Yzep7NzyNGXYmI2q69b1EXNNAfbaU0jZdk3nAQtlauXU02pdP6buIZ4GmRi k0wi/IqO2WeFZtOQmxotW28Slvl4xUMziwBilDDelTeo0q6JaKJihcVqsNZPVKaEErw2 /afR4ySRTRL/7jAAC+aYEc4NUnI75irnF9bM2ZquvOrVEfa20dwdxQPs5Qvt9ksH6MU0 B0Wg== 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:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:delivered-to:arc-authentication-results; bh=tw9IWVwtDrZ20WMlP576jV9MjTP7Iv8jpNtStQcqaD8=; b=p3p9Aomkc09r4SZvh956bfU3FRILOKH/XTKCbKyAnH1I5anwJRAtz+8030OfEEfz/2 4TDvT9MMNEUnV+DJ3zySyhVIWPdewhHZ9NeRKsOCaWXnydwLZG/qOBEltaWlapKLamgY V2YikTmhiZXdfnGIEHfx/y2Kv2qvXbWV/ZMOXwlyLfJ3/cIzb+S7pDceKCBt89v4CWNX YUclo4vWSLp4swJAwV/7liJmoG8e1CeQion3y2u7mt6VVAq+SlqAWmDeI4zHOSODubj9 18cmIarL4IzYHgcuDeuP+TENd178A7MEjgwLrU2TGXRx+BMo4Ml/IKlaP4QR0k7NxIlq wf8g== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w7si1691749wre.56.2017.10.25.01.23.17; Wed, 25 Oct 2017 01:23:18 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7EE4B68A427; Wed, 25 Oct 2017 11:23:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from nef2.ens.fr (nef2.ens.fr [129.199.96.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 00E0868A40B for ; Wed, 25 Oct 2017 11:22:54 +0300 (EEST) Received: from phare.normalesup.org (archicubes.ens.fr [129.199.129.80]) by nef2.ens.fr (8.13.6/1.01.28121999) with ESMTP id v9P8N2tZ033906 for ; Wed, 25 Oct 2017 10:23:02 +0200 (CEST) Received: by phare.normalesup.org (Postfix, from userid 1001) id 249B7E00F5; Wed, 25 Oct 2017 10:23:02 +0200 (CEST) From: Nicolas George To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Oct 2017 10:22:57 +0200 Message-Id: <20171025082258.32530-2-george@nsup.org> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20171025082258.32530-1-george@nsup.org> References: <20171025082258.32530-1-george@nsup.org> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (nef2.ens.fr [129.199.96.32]); Wed, 25 Oct 2017 10:23:02 +0200 (CEST) Subject: [FFmpeg-devel] [PATCH 2/3] lavf/avio: temporarily accept 0 as EOF. 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Print a warning to let applicatios fix their use. After a deprecation period, check with a low-level assert. Also make the constraint explicit in the doxygen comment. Signed-off-by: Nicolas George --- libavformat/avio.h | 2 ++ libavformat/aviobuf.c | 30 +++++++++++++++++++++--------- libavformat/version.h | 3 +++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/libavformat/avio.h b/libavformat/avio.h index 19ecd96eb7..76ff7cd81e 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -452,6 +452,8 @@ void avio_free_directory_entry(AVIODirEntry **entry); * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. * @param opaque An opaque pointer to user-specific data. * @param read_packet A function for refilling the buffer, may be NULL. + * For stream protocols, must never return 0 but rather + * a proper AVERROR code. * @param write_packet A function for writing the buffer contents, may be NULL. * The function may not change the input buffers content. * @param seek A function for seeking to specified byte position, may be NULL. diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index 3e9d774a13..bb5bcf7a14 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -524,6 +524,24 @@ void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType typ s->last_time = time; } +static int read_packet_wrapper(AVIOContext *s, uint8_t *buf, int size) +{ + int ret; + + if (!s->read_packet) + return AVERROR_EOF; + ret = s->read_packet(s->opaque, buf, size); +#if FF_API_OLD_AVIO_EOF_0 + if (!ret && !s->max_packet_size) { + av_log(s, AV_LOG_WARNING, "Invalid return value 0 for stream protocol\n"); + ret = AVERROR_EOF; + } +#else + av_assert2(ret || s->max_packet_size); +#endif + return ret; +} + /* Input stream */ static void fill_buffer(AVIOContext *s) @@ -562,10 +580,7 @@ static void fill_buffer(AVIOContext *s) len = s->orig_buffer_size; } - if (s->read_packet) - len = s->read_packet(s->opaque, dst, len); - else - len = AVERROR_EOF; + len = read_packet_wrapper(s, dst, len); if (len == AVERROR_EOF) { /* do not modify buffer if EOF reached so that a seek back can be done without rereading data */ @@ -638,10 +653,7 @@ int avio_read(AVIOContext *s, unsigned char *buf, int size) if (len == 0 || s->write_flag) { if((s->direct || size > s->buffer_size) && !s->update_checksum) { // bypass the buffer and read data directly into buf - if(s->read_packet) - len = s->read_packet(s->opaque, buf, size); - else - len = AVERROR_EOF; + len = read_packet_wrapper(s, buf, size); if (len == AVERROR_EOF) { /* do not modify buffer if EOF reached so that a seek back can be done without rereading data */ @@ -708,7 +720,7 @@ int avio_read_partial(AVIOContext *s, unsigned char *buf, int size) return -1; if (s->read_packet && s->write_flag) { - len = s->read_packet(s->opaque, buf, size); + len = read_packet_wrapper(s, buf, size); if (len > 0) s->pos += len; return len; diff --git a/libavformat/version.h b/libavformat/version.h index 0feb788c36..358ab91ab2 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -79,6 +79,9 @@ #ifndef FF_API_OLD_ROTATE_API #define FF_API_OLD_ROTATE_API (LIBAVFORMAT_VERSION_MAJOR < 59) #endif +#ifndef FF_API_OLD_AVIO_EOF_0 +#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59) +#endif #ifndef FF_API_R_FRAME_RATE