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]
