Andreas Rheinhardt: > The subfile protocol treats an end of 0 as meaning "until EOF"; this got > implemented by simply setting the end to INT64_MAX. But seeking relative > to EOF or AVSEEK_SIZE seeking hasn't been adapted; the result is that > e.g. the duration of transport streams isn't correctly determined when > this option is used. This is fixed in this patch. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> > --- > libavformat/subfile.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/libavformat/subfile.c b/libavformat/subfile.c > index b527f2bee1..2f162e0a34 100644 > --- a/libavformat/subfile.c > +++ b/libavformat/subfile.c > @@ -116,11 +116,17 @@ static int subfile_read(URLContext *h, unsigned char > *buf, int size) > static int64_t subfile_seek(URLContext *h, int64_t pos, int whence) > { > SubfileContext *c = h->priv_data; > - int64_t new_pos = -1; > + int64_t new_pos = -1, end; > int ret; > > + if (whence == AVSEEK_SIZE || whence == SEEK_END) { > + end = c->end; > + if (end == INT64_MAX && (end = ffurl_seek(c->h, 0, AVSEEK_SIZE)) < 0) > + return end; > + } > + > if (whence == AVSEEK_SIZE) > - return c->end - c->start; > + return end - c->start; > switch (whence) { > case SEEK_SET: > new_pos = c->start + pos; > @@ -129,7 +135,7 @@ static int64_t subfile_seek(URLContext *h, int64_t pos, > int whence) > new_pos += pos; > break; > case SEEK_END: > - new_pos = c->end + c->pos; > + new_pos = end + c->pos; > break; > } > if (new_pos < c->start) > Ping.
- Andreas _______________________________________________ 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".