On Wed, Apr 3, 2019 at 10:42 PM Marton Balint <c...@passwd.hu> wrote: > > Signed-off-by: Marton Balint <c...@passwd.hu> > --- > doc/protocols.texi | 9 +++++++++ > libavformat/file.c | 5 +++++ > 2 files changed, 14 insertions(+) > > diff --git a/doc/protocols.texi b/doc/protocols.texi > index e1caa049a5..34967ff5e2 100644 > --- a/doc/protocols.texi > +++ b/doc/protocols.texi > @@ -199,6 +199,15 @@ If set to 1, the protocol will retry reading at the end > of the file, allowing > reading files that still are being written. In order for this to terminate, > you either need to use the rw_timeout option, or use the interrupt callback > (for API users). > + > +@item seekable > +Controls if seekability is advertised on the file. 1 means seekable, 0 means > +non-seekable, -1 means auto (seekable for normal files, non-seekable for > named > +pipes). > + > +Many demuxers handle seekable and non-seekable resources differently, > +overriding this might speed up opening certain files at the cost of losing > some > +features (e.g. accurate seeking). > @end table > > @section ftp > diff --git a/libavformat/file.c b/libavformat/file.c > index e613b91010..e46596fed1 100644 > --- a/libavformat/file.c > +++ b/libavformat/file.c > @@ -73,6 +73,7 @@ typedef struct FileContext { > int trunc; > int blocksize; > int follow; > + int seekable; > #if HAVE_DIRENT_H > DIR *dir; > #endif > @@ -82,6 +83,7 @@ static const AVOption file_options[] = { > { "truncate", "truncate existing files on write", offsetof(FileContext, > trunc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_ENCODING_PARAM }, > { "blocksize", "set I/O operation maximum block size", > offsetof(FileContext, blocksize), AV_OPT_TYPE_INT, { .i64 = INT_MAX }, 1, > INT_MAX, AV_OPT_FLAG_ENCODING_PARAM }, > { "follow", "Follow a file as it is being written", > offsetof(FileContext, follow), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, > AV_OPT_FLAG_DECODING_PARAM }, > + { "seekable", "Sets if the file is seekable", offsetof(FileContext, > seekable), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, AV_OPT_FLAG_DECODING_PARAM > | AV_OPT_FLAG_ENCODING_PARAM }, > { NULL } > }; > > @@ -238,6 +240,9 @@ static int file_open(URLContext *h, const char *filename, > int flags) > if (!h->is_streamed && flags & AVIO_FLAG_WRITE) > h->min_packet_size = h->max_packet_size = 262144; > > + if (c->seekable >= 0) > + h->is_streamed = !c->seekable; > +
You should probably not let a user enable seeking if the resource doesn't allow it. - Hendrik _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".