mirror of https://git.ffmpeg.org/ffmpeg.git
avidec: correct frame_offset for seeking
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
cde5589717
commit
187528441a
|
@ -1303,7 +1303,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
|
||||||
{
|
{
|
||||||
AVIContext *avi = s->priv_data;
|
AVIContext *avi = s->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int i, index;
|
int i, index, j;
|
||||||
int64_t pos, pos_min;
|
int64_t pos, pos_min;
|
||||||
AVIStream *ast;
|
AVIStream *ast;
|
||||||
|
|
||||||
|
@ -1367,6 +1367,22 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
|
||||||
index=0;
|
index=0;
|
||||||
ast2->seek_pos= st2->index_entries[index].pos;
|
ast2->seek_pos= st2->index_entries[index].pos;
|
||||||
pos_min= FFMIN(pos_min,ast2->seek_pos);
|
pos_min= FFMIN(pos_min,ast2->seek_pos);
|
||||||
|
}
|
||||||
|
for(i = 0; i < s->nb_streams; i++) {
|
||||||
|
AVStream *st2 = s->streams[i];
|
||||||
|
AVIStream *ast2 = st2->priv_data;
|
||||||
|
|
||||||
|
if (ast2->sub_ctx || st2->nb_index_entries <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
index = av_index_search_timestamp(
|
||||||
|
st2,
|
||||||
|
av_rescale_q(timestamp, st->time_base, st2->time_base) * FFMAX(ast2->sample_size, 1),
|
||||||
|
flags | AVSEEK_FLAG_BACKWARD);
|
||||||
|
if(index<0)
|
||||||
|
index=0;
|
||||||
|
while(index>0 && st2->index_entries[index-1].pos >= pos_min)
|
||||||
|
index--;
|
||||||
ast2->frame_offset = st2->index_entries[index].timestamp;
|
ast2->frame_offset = st2->index_entries[index].timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue