# HG changeset patch # User banan # Date 1158485989 0 # Node ID defa841523a9421cd0d5c3a483771d838b48d4fb # Parent 132206560fe691f59db7d59d6e32e6cb7a7478cf FLV seeking patch by Nazo. lovesyao at aol com. diff -r 132206560fe6 -r defa841523a9 flvdec.c --- 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, };