Mercurial > libavformat.hg
changeset 1318:defa841523a9 libavformat
FLV seeking patch by Nazo. lovesyao at aol com.
author | banan |
---|---|
date | Sun, 17 Sep 2006 09:39:49 +0000 |
parents | 132206560fe6 |
children | d93c1458d7be |
files | flvdec.c |
diffstat | 1 files changed, 18 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/flvdec.c Fri Sep 15 19:14:24 2006 +0000 +++ b/flvdec.c Sun Sep 17 09:39:49 2006 +0000 @@ -55,15 +55,18 @@ url_fseek(&s->pb, offset, SEEK_SET); + s->start_time = 0; + return 0; } static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) { - int ret, i, type, size, pts, flags, is_audio, next; + int ret, i, type, size, pts, flags, is_audio, next, pos; AVStream *st = NULL; for(;;){ + pos = url_ftell(&s->pb); url_fskip(&s->pb, 4); /* size of previous packet */ type = get_byte(&s->pb); size = get_be24(&s->pb); @@ -154,6 +157,8 @@ url_fseek(&s->pb, next, SEEK_SET); continue; } + if ((flags >> 4)==1) + av_add_index_entry(st, pos, pts, size, 0, AVINDEX_KEYFRAME); break; } @@ -216,6 +221,17 @@ return 0; } +static int flv_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags) +{ + AVStream *st = s->streams[stream_index]; + int index = av_index_search_timestamp(st, timestamp, flags); + if (index < 0) + return -1; + url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET); + + return 0; +} + AVInputFormat flv_demuxer = { "flv", "flv format", @@ -224,6 +240,7 @@ flv_read_header, flv_read_packet, flv_read_close, + flv_read_seek, .extensions = "flv", .value = CODEC_ID_FLV1, };