From patchwork Fri Oct 27 18:46:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas George X-Patchwork-Id: 5724 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp1033974jah; Fri, 27 Oct 2017 11:46:45 -0700 (PDT) X-Google-Smtp-Source: ABhQp+ToUKziMILVA03SLd9t67PMb1cEsKlyrjQfJA8LCLX8ysCTN2L2CJ7Xoo59oedMOETxC5rV X-Received: by 10.28.230.77 with SMTP id d74mr1062169wmh.75.1509130005446; Fri, 27 Oct 2017 11:46:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509130005; cv=none; d=google.com; s=arc-20160816; b=GIXPwmxM+z7+XMtl/2m2j0B+ne5CNFBwpy1zwrEciIqYyUz4RZ36of3m8LZkw74LJB hezQdzWPN7ErSw6l8uPWFSK6tt5VF+cAmlvBKbB6fKDixMwqRA5k/bl/+5LX4NrJMNrs 44nM55K+thivOQypjn0xymP2nZ7gFNH8wDC5n9V/ApHrOhD1aaz+7SA9XZJTTfGU3FkP H3eF08YAWKGucdl8zllRcTR9Qdk9s6Bjb/AfMRSl742U3tEETjFHxMGQEXEUp41AZfR8 rAJOJlYUJPdd+lPtYheoxWc8yD9Tnqg5CtnUvqxGWoOJnrsKlMul7m9/BePzXTzLBfyo cLNA== 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=bD7LwxS3ZxyNUBfopOPxIIKqxZ1k3VSXDjhEPhbFOS8=; b=gxM1rJo/LX3YCWvDPh1xwxxjSsYMV3fHlaG2pPszLWXJqwUJk2ZbN0FcZpHP3vezWz iQPH6DvaDwdbYlbHsANbj9ihy4yypX2YKK9gAT84QRXbhwL/aZRkp5eJ1oQIG49pMtix /xFgxk6E7PnEu8TToArSh2I6Z/e+6UGcxYwAPo/Ozc8zW/Xq3cjLtYwOuKz17KbLqW1O WCCBfh6BxfNt4fFoWqcHpvY8UBBpfmpMeHLMcQUh1lyRmHNH+NolShrHXH1PcT3aJ5DF ZOtYkZyxMNJGBk2Nk5tRGDCKO/QW/EMGMU/K091uFTyA+ljxm/Wd+zaRYOwwOGdxeC6c n9YQ== 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 7si4669628wro.169.2017.10.27.11.46.45; Fri, 27 Oct 2017 11:46:45 -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 E2E6268A3E9; Fri, 27 Oct 2017 21:46:29 +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 E718E68A317 for ; Fri, 27 Oct 2017 21:46:23 +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 v9RIkWOe076643 for ; Fri, 27 Oct 2017 20:46:32 +0200 (CEST) Received: by phare.normalesup.org (Postfix, from userid 1001) id EEB6EE00CF; Fri, 27 Oct 2017 20:46:31 +0200 (CEST) From: Nicolas George To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Oct 2017 20:46:28 +0200 Message-Id: <20171027184629.20772-2-george@nsup.org> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20171027184629.20772-1-george@nsup.org> References: <20171027184629.20772-1-george@nsup.org> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.4.3 (nef2.ens.fr [129.199.96.32]); Fri, 27 Oct 2017 20:46:32 +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..bfd40f5097 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(NULL, 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 ac409dbad2..0552f0c62c 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -76,6 +76,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