From patchwork Mon Oct 18 12:47:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 31141 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp3262489ioa; Mon, 18 Oct 2021 05:48:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy32GOsUQq8Ro68Y+U/wAwBciig3d33EHsmygpzKzVvqd1zpgFfrTmsBmzQyoOOlfPe5TV4 X-Received: by 2002:a17:907:7b9c:: with SMTP id ne28mr29709721ejc.531.1634561290191; Mon, 18 Oct 2021 05:48:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634561290; cv=none; d=google.com; s=arc-20160816; b=LvrBdkX1R5Cou4GiMhQG/z0T44Y4n/Dgtg9H5pXWDRjthqlWr8dwjRwihFQPSHmPJy 2INpw3uA4RN7/LHBF2fQNdOglrbcwMHCzr8InqP0V8pFBlrfNLFquT1D47W/NTVf2VUY nv0ui1NxgzkAXifsRM5R6iu7DrZdtQFdJoMgy5buReK7IppiW5giPBIJyL0Nu22KoZFe oe79oqdZUpjlp2XhQCctnRXfjy66YdpEeRxsLsgfCR1W8C4EyCXa6EzBjDegLiV2gw9m W7Hwdk+eMiZ3Bat96KLHL8pTPWK2mrqeaAxspLyEU3NIssTqseTZOfwe2iX+Enol20gL u/PA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=hJA0OAU1kYM4Y2q5tI+e5odqAEHCgYVTdgjJxw8r0Vg=; b=KPuaGJn3wUZoVk+/BGCsuauq837E8q9Q5jjRFVGFqav54ArmE48AkFlVszDF+/8c4J +ySRhGRzAGnxuLnT2AnRnDQ1EfI7sMZhyhqQXzrkyWagfuuFYzNRWoJWZYR8bPaYBjeg Mi+BZZs4O/75w4r2juY608+6VMyhntPRWPVsQBB5yrgfwkBZhHGJGssxncumUSUTyiZ7 poj4xgR40wsqIT9OmS8Q3wPU1SHXjc7+G8yhR72roQhgImvnGKq53c9ZgcFqYkVo3e/L pc0mgoJ2DTWthMKjAXr/Jkm8GJ7B3cbL7wmLS2AaM9c+U7CSihBFOGOITipoPxlYDUhM FM3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=Jb+dkJfI; 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=QUARANTINE 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 z23si19863940edl.391.2021.10.18.05.48.09; Mon, 18 Oct 2021 05:48:10 -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=20210112 header.b=Jb+dkJfI; 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=QUARANTINE 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 1F7D768A77C; Mon, 18 Oct 2021 15:47:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f173.google.com (mail-lj1-f173.google.com [209.85.208.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CD24968A6B0 for ; Mon, 18 Oct 2021 15:47:31 +0300 (EEST) Received: by mail-lj1-f173.google.com with SMTP id q16so8818825ljg.3 for ; Mon, 18 Oct 2021 05:47:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=25UjHIsqyW/1m0Z8VId/8DvJ/GYhb+r3iwgYjHGFIls=; b=Jb+dkJfI7bfJQZuUK/Y3dC4/ub946l2Qp41h02wm5pkoMHYwQJJGAr7mdzj2qc+5r+ dM+V8PZwlylvBsFuDLVSnkBzHk2GWOz/FFouXgeHEp9YakeVYWPrBqDFmPcDNolqR+4G yzg/CBtMoQe/azyVAsMBdWAGCexoTtg//HMYK36ZBcMrViV4+T0oDRKJB064ZqmjYfE+ nuO5qsWBqSeDS3bBNenNxJ9BmJDFIdaGELIrM1auV0ByEFnH0InzKvmNbhmy1Xm9Xj06 cGnRmS3M/4MGE+vXuiS1iuqhr8GFVsCUySJDDRP3RXfnv24QIyu/yrFBLPzU9KKmhMtO Ee5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=25UjHIsqyW/1m0Z8VId/8DvJ/GYhb+r3iwgYjHGFIls=; b=J8EN2JAm3Dnue8Nfn+PBEqcc1LGJGA/+OFnf6f0i3mhAZwJ8KnCc3XlIQUanKUgF1f DSte0mIO9cqdhp+KEryXX2fSaJhFImTyO6WJcz07Pmte0KkW5zfOpBP7IRvvEyGSuNuG Z9b5fs3vJa5ieUjoIBXypK6njdwswYsMT12O+D761UQYG87+OBHXDx3E0CMePyx/02pm Tp0zFMUgzsXKLm1wDv+WgoIh4A0IRsQ3iPb7qtTyVl1pBbSFn+0JbC6AKPJoG2NPr+jr GSkMh6Bd8LFS6V4rAbjPfw46xQAJnXvY4d5Oic0W0juYIoelwk1oO5YvT+d8kreHd4sV IOMA== X-Gm-Message-State: AOAM531wsQU3ws3UyIeZNiHdunMGI+y/h02txRL2ivgkzDl6NP+gIofn EKVz0SvW60w1ehN2YC9Wmf3tBdbOjNx9vyGL X-Received: by 2002:a05:651c:54d:: with SMTP id q13mr8505467ljp.239.1634561251123; Mon, 18 Oct 2021 05:47:31 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id m16sm1392779lfl.212.2021.10.18.05.47.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Oct 2021 05:47:30 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Mon, 18 Oct 2021 15:47:23 +0300 Message-Id: <20211018124723.11497-4-jeebjp@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211018124723.11497-1-jeebjp@gmail.com> References: <20211018124723.11497-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 3/3] avformat/avio{, buf}: introduce public AVIOContext::bytes_{read, written} 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: dP4cGplnoMWK Such fields can be seen as generally useful in cases where the API user is not implementing custom AVIO callbacks, but still would like to know if data is being read or written out, such as in case data is being read from input but no AVPacket has been received yet. --- doc/APIchanges | 3 +++ libavformat/avio.h | 14 +++++++++++++- libavformat/avio_internal.h | 5 +++++ libavformat/aviobuf.c | 10 ++++++++-- libavformat/version.h | 2 +- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 4731e14cb1..99e185ee4e 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-10-18 - xxxxxxxxxx - lavf 59.8.100 - avio.h + Introduce public bytes_{read,written} statistic fields to AVIOContext. + 2021-10-13 - xxxxxxxxxx - lavf 59.7.100 - avio.h Deprecate AVIOContext.written. Originally added as a private entry in commit 3f75e5116b900f1428aa13041fc7d6301bf1988a, its grouping with diff --git a/libavformat/avio.h b/libavformat/avio.h index 5e60c2e35c..cd63322a62 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -292,7 +292,9 @@ typedef struct AVIOContext { #if FF_API_AVIOCONTEXT_WRITTEN /** - * @deprecated field utilized privately by libavformat. + * @deprecated field utilized privately by libavformat. For a public + * statistic of how many bytes were written out, see + * AVIOContext::bytes_written. */ attribute_deprecated int64_t written; @@ -303,6 +305,16 @@ typedef struct AVIOContext { * used keeping track of already written data for a later flush. */ unsigned char *buf_ptr_max; + + /** + * Read-only statistic of bytes read for this AVIOContext. + */ + int64_t bytes_read; + + /** + * Read-only statistic of bytes written for this AVIOContext. + */ + int64_t bytes_written; } AVIOContext; /** diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h index 467e80701f..187433f283 100644 --- a/libavformat/avio_internal.h +++ b/libavformat/avio_internal.h @@ -51,6 +51,11 @@ typedef struct FFIOContext { */ int64_t bytes_read; + /** + * Bytes written statistic + */ + int64_t bytes_written; + /** * seek statistic */ diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index f21f1c89df..5da4dea7b6 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -169,6 +169,9 @@ static void writeout(AVIOContext *s, const uint8_t *data, int len) if (ret < 0) { s->error = ret; } else { + ctx->bytes_written += len; + s->bytes_written = ctx->bytes_written; + if (s->pos + len > ctx->written_output_size) { ctx->written_output_size = s->pos + len; #if FF_API_AVIOCONTEXT_WRITTEN @@ -584,6 +587,7 @@ static void fill_buffer(AVIOContext *s) s->buf_ptr = dst; s->buf_end = dst + len; ffiocontext(s)->bytes_read += len; + s->bytes_read = ffiocontext(s)->bytes_read; } } @@ -657,6 +661,7 @@ int avio_read(AVIOContext *s, unsigned char *buf, int size) } else { s->pos += len; ffiocontext(s)->bytes_read += len; + s->bytes_read = ffiocontext(s)->bytes_read; size -= len; buf += len; // reset the buffer @@ -1236,8 +1241,9 @@ int avio_close(AVIOContext *s) av_freep(&s->buffer); if (s->write_flag) - av_log(s, AV_LOG_VERBOSE, "Statistics: %d seeks, %d writeouts\n", - ctx->seek_count, ctx->writeout_count); + av_log(s, AV_LOG_VERBOSE, + "Statistics: %"PRId64" bytes written, %d seeks, %d writeouts\n", + ctx->bytes_written, ctx->seek_count, ctx->writeout_count); else av_log(s, AV_LOG_VERBOSE, "Statistics: %"PRId64" bytes read, %d seeks\n", ctx->bytes_read, ctx->seek_count); diff --git a/libavformat/version.h b/libavformat/version.h index de780124c7..81ed517609 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 59 -#define LIBAVFORMAT_VERSION_MINOR 7 +#define LIBAVFORMAT_VERSION_MINOR 8 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \