mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
dynamic index building so forward and backward seeking in avi without an index is possible
Originally committed as revision 7842 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e9b78eeba2
commit
ded3c7da61
@ -626,9 +626,9 @@ resync:
|
||||
pkt->stream_index = avi->stream_index;
|
||||
|
||||
if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
|
||||
if(st->index_entries){
|
||||
AVIndexEntry *e;
|
||||
int index;
|
||||
assert(st->index_entries);
|
||||
|
||||
index= av_index_search_timestamp(st, pkt->dts, 0);
|
||||
e= &st->index_entries[index];
|
||||
@ -637,11 +637,6 @@ resync:
|
||||
if (e->flags & AVINDEX_KEYFRAME)
|
||||
pkt->flags |= PKT_FLAG_KEY;
|
||||
}
|
||||
} else {
|
||||
/* if no index, better to say that all frames
|
||||
are key frames */
|
||||
pkt->flags |= PKT_FLAG_KEY;
|
||||
}
|
||||
} else {
|
||||
pkt->flags |= PKT_FLAG_KEY;
|
||||
}
|
||||
@ -735,6 +730,13 @@ resync:
|
||||
avi->stream_index= n;
|
||||
ast->packet_size= size + 8;
|
||||
ast->remaining= size;
|
||||
|
||||
{
|
||||
uint64_t pos= url_ftell(pb) - 8;
|
||||
if(!st->index_entries || !st->nb_index_entries || st->index_entries[st->nb_index_entries - 1].pos < pos){
|
||||
av_add_index_entry(st, pos, ast->frame_offset / FFMAX(1, ast->sample_size), size, 0, AVINDEX_KEYFRAME);
|
||||
}
|
||||
}
|
||||
goto resync;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user