aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerii Zapodovnikov <val.zapod.vz@gmail.com>2025-08-04 23:53:49 +0300
committerMarton Balint <cus@passwd.hu>2025-08-17 20:47:11 +0000
commit8426622bb9584ec4fc32215f006a91e7ddc480cc (patch)
treeeec5b77fd6bc33b4cbe5977835551f281deec46c
parent134fbfd1dcb59441e38d870ddd231772f4e8e127 (diff)
downloadffmpeg-8426622bb9584ec4fc32215f006a91e7ddc480cc.tar.gz
avformat/avio: clarify that AVSEEK_FORCE has no effect
avio_seek() never supported SEEK_END and returned AVERROR(EINVAL) when specified, so the later check "(whence != SEEK_END || force)" was always true. This also means that AVSEEK_FORCE had no effect since 7a6fe01f99, that is 15 years ago. Rather than changing behaviour, let's document instead that the flag has no effect. Also fixed other commit 41ed7ab45f which confused ORing / passing AVSEEK_FORCE and AVSEEK_SIZE in the docs. Signed-off-by: Valerii Zapodovnikov <val.zapod.vz@gmail.com>
-rw-r--r--libavformat/avio.h6
-rw-r--r--libavformat/aviobuf.c8
2 files changed, 6 insertions, 8 deletions
diff --git a/libavformat/avio.h b/libavformat/avio.h
index ebf611187d..fbcb7dbfc3 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -461,17 +461,17 @@ int avio_put_str16be(AVIOContext *s, const char *str);
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type);
/**
- * ORing this as the "whence" parameter to a seek function causes it to
+ * Passing this as the "whence" parameter to a seek function causes it to
* return the filesize without seeking anywhere. Supporting this is optional.
* If it is not supported then the seek function will return <0.
*/
#define AVSEEK_SIZE 0x10000
/**
- * Passing this flag as the "whence" parameter to a seek function causes it to
+ * OR'ing this flag into the "whence" parameter to a seek function causes it to
* seek by any means (like reopening and linear reading) or other normally unreasonable
* means that can be extremely slow.
- * This may be ignored by the seek code.
+ * This is the default and therefore ignored by the seek code since 2010.
*/
#define AVSEEK_FORCE 0x20000
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 34743556ae..2e65f50006 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -238,10 +238,9 @@ int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
FFIOContext *const ctx = ffiocontext(s);
int64_t offset1;
int64_t pos;
- int force = whence & AVSEEK_FORCE;
int buffer_size;
int short_seek;
- whence &= ~AVSEEK_FORCE;
+ whence &= ~AVSEEK_FORCE; // force flag does nothing
if(!s)
return AVERROR(EINVAL);
@@ -282,8 +281,7 @@ int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
} else if ((!(s->seekable & AVIO_SEEKABLE_NORMAL) ||
offset1 <= buffer_size + short_seek) &&
!s->write_flag && offset1 >= 0 &&
- (!s->direct || !s->seek) &&
- (whence != SEEK_END || force)) {
+ (!s->direct || !s->seek)) {
while(s->pos < offset && !s->eof_reached)
fill_buffer(s);
if (s->eof_reached)
@@ -300,7 +298,7 @@ int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
s->pos = pos;
s->eof_reached = 0;
fill_buffer(s);
- return avio_seek(s, offset, SEEK_SET | force);
+ return avio_seek(s, offset, SEEK_SET);
} else {
int64_t res;
if (s->write_flag) {