diff options
author | Valerii Zapodovnikov <val.zapod.vz@gmail.com> | 2025-08-04 23:53:49 +0300 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2025-08-17 20:47:11 +0000 |
commit | 8426622bb9584ec4fc32215f006a91e7ddc480cc (patch) | |
tree | eec5b77fd6bc33b4cbe5977835551f281deec46c | |
parent | 134fbfd1dcb59441e38d870ddd231772f4e8e127 (diff) | |
download | ffmpeg-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.h | 6 | ||||
-rw-r--r-- | libavformat/aviobuf.c | 8 |
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) { |