1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-21 10:55:51 +02:00

add support for seeking in matroska files

Originally committed as revision 8696 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Aurelien Jacobs 2007-04-09 16:48:28 +00:00
parent df06539a25
commit cca9b6cdb3

View File

@ -2366,6 +2366,18 @@ matroska_read_header (AVFormatContext *s,
res = 0;
}
if (matroska->index_parsed) {
int i, track, stream;
for (i=0; i<matroska->num_indexes; i++) {
MatroskaDemuxIndex *idx = &matroska->index[i];
track = matroska_find_track_by_num(matroska, idx->track);
stream = matroska->tracks[track]->stream_index;
av_add_index_entry(matroska->ctx->streams[stream],
idx->pos, idx->time/matroska->time_scale,
0, 0, AVINDEX_KEYFRAME);
}
}
return res;
}
@ -2753,6 +2765,26 @@ matroska_read_packet (AVFormatContext *s,
return 0;
}
static int
matroska_read_seek (AVFormatContext *s, int stream_index, int64_t timestamp,
int flags)
{
MatroskaDemuxContext *matroska = s->priv_data;
AVStream *st = s->streams[stream_index];
int index;
/* find index entry */
index = av_index_search_timestamp(st, timestamp, flags);
if (index < 0)
return 0;
/* do the seek */
url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET);
matroska->num_packets = 0;
matroska->peek_id = 0;
return 0;
}
static int
matroska_read_close (AVFormatContext *s)
{
@ -2793,4 +2825,5 @@ AVInputFormat matroska_demuxer = {
matroska_read_header,
matroska_read_packet,
matroska_read_close,
matroska_read_seek,
};