mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
[wtv] Check return value of avio_seek and avoid modifying state if it fails
This commit is contained in:
parent
d9d7174d70
commit
7bcd81299a
@ -997,19 +997,23 @@ static int read_seek(AVFormatContext *s, int stream_index,
|
||||
|
||||
i = ff_index_search_timestamp(wtv->index_entries, wtv->nb_index_entries, ts_relative, flags);
|
||||
if (i < 0) {
|
||||
if (wtv->last_valid_pts == AV_NOPTS_VALUE || ts < wtv->last_valid_pts)
|
||||
avio_seek(pb, 0, SEEK_SET);
|
||||
else if (st->duration != AV_NOPTS_VALUE && ts_relative > st->duration && wtv->nb_index_entries)
|
||||
avio_seek(pb, wtv->index_entries[wtv->nb_index_entries - 1].pos, SEEK_SET);
|
||||
if (wtv->last_valid_pts == AV_NOPTS_VALUE || ts < wtv->last_valid_pts) {
|
||||
if (avio_seek(pb, 0, SEEK_SET) < 0)
|
||||
return -1;
|
||||
} else if (st->duration != AV_NOPTS_VALUE && ts_relative > st->duration && wtv->nb_index_entries) {
|
||||
if (avio_seek(pb, wtv->index_entries[wtv->nb_index_entries - 1].pos, SEEK_SET) < 0)
|
||||
return -1;
|
||||
}
|
||||
if (parse_chunks(s, SEEK_TO_PTS, ts, 0) < 0)
|
||||
return AVERROR(ERANGE);
|
||||
return 0;
|
||||
}
|
||||
if (avio_seek(pb, wtv->index_entries[i].pos, SEEK_SET) < 0)
|
||||
return -1;
|
||||
wtv->pts = wtv->index_entries[i].timestamp;
|
||||
if (wtv->epoch != AV_NOPTS_VALUE)
|
||||
wtv->pts += wtv->epoch;
|
||||
wtv->last_valid_pts = wtv->pts;
|
||||
avio_seek(pb, wtv->index_entries[i].pos, SEEK_SET);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user