PR #21321 opened by Marton Balint (cus)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21321
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21321.patch

Also clarify the documentation a bit.

Signed-off-by: Marton Balint <[email protected]>


>From 3c14b23663d09be291799af0b6a62dfe553a072a Mon Sep 17 00:00:00 2001
From: Marton Balint <[email protected]>
Date: Tue, 30 Dec 2025 02:36:04 +0100
Subject: [PATCH] avformat/file: respect pkt_size even in streaming mode

Also clarify the documentation a bit.

Signed-off-by: Marton Balint <[email protected]>
---
 doc/protocols.texi | 12 +++++++-----
 libavformat/file.c | 18 +++++++++++-------
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/doc/protocols.texi b/doc/protocols.texi
index b5330a1160..350c52a465 100644
--- a/doc/protocols.texi
+++ b/doc/protocols.texi
@@ -354,13 +354,15 @@ overriding this might speed up opening certain files at 
the cost of losing some
 features (e.g. accurate seeking).
 
 @item pkt_size
-Set the maximum packet size used for file I/O.
+Set the maximum packet size used for file I/O. A smaller value may reduce
+memory usage. A higher value may increase throughput especially with networked
+filesystems.
 
-For writing, this sets the size of each write operation. The default is
-262144 bytes.
 For reading, if explicitly set, it overrides the default internal buffer size
-(32768 bytes) and limits the maximum amount of data read per operation.
-Setting a smaller value may reduce memory usage when reading files 
sequentially.
+(32 KB) and limits the maximum amount of data read per operation.
+
+For writing, this sets the size of each write operation. The default is 256 KB
+for regular files, 32 KB otherwise.
 @end table
 
 @section ftp
diff --git a/libavformat/file.c b/libavformat/file.c
index 23dc7081d3..3ceddc8c25 100644
--- a/libavformat/file.c
+++ b/libavformat/file.c
@@ -312,14 +312,18 @@ static int file_open(URLContext *h, const char *filename, 
int flags)
 
     h->is_streamed = !fstat(fd, &st) && S_ISFIFO(st.st_mode);
 
-    /* Buffer writes more than the default 32k to improve throughput especially
-     * with networked file systems */
-    if (!h->is_streamed) {
-        if (flags & AVIO_FLAG_WRITE)
-            h->min_packet_size = h->max_packet_size = c->pkt_size ? 
c->pkt_size : 262144;
-        else if (flags & AVIO_FLAG_READ && c->pkt_size)
-            h->max_packet_size = c->pkt_size;
+    if (c->pkt_size) {
+        h->max_packet_size = c->pkt_size;
+    } else {
+        /* Buffer writes more than the default 32k to improve throughput 
especially
+         * with networked file systems */
+        if (!h->is_streamed && flags & AVIO_FLAG_WRITE)
+             h->max_packet_size = 262144;
     }
+    /* Disable per-packet flushing by default to improve throughput especially
+     * with networked file systems */
+    if (!h->is_streamed && flags & AVIO_FLAG_WRITE)
+        h->min_packet_size = h->max_packet_size;
 
     if (c->seekable >= 0)
         h->is_streamed = !c->seekable;
-- 
2.49.1

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to