mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-23 11:19:55 +00:00
libavformat/subfile: Improve AVSEEK_SIZE/SEEK_END seeking
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.rheinhardt@gmail.com>
This commit is contained in:
parent
e51cc7ed85
commit
4877b5869e
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user