From: Michael Chinen Date: Mon, 27 Sep 2010 22:17:58 +0000 (+0000) Subject: Fix index_entries pos: X-Git-Tag: v0.7b1~2105 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=59cb40b92194c272c4d097c702a46f90edb94958;p=platform%2Fupstream%2Flibav.git Fix index_entries pos: It was being set wrong for files with data_offset > 0 Patch by Michael Chinen, mchinen gmail Originally committed as revision 25239 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 64a558323..9f888992c 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3738,6 +3738,8 @@ typedef struct AVCodecParserContext { int flags; #define PARSER_FLAG_COMPLETE_FRAMES 0x0001 #define PARSER_FLAG_ONCE 0x0002 +/// Set if the parser has a valid file offset +#define PARSER_FLAG_FETCHED_OFFSET 0x0004 int64_t offset; ///< byte offset from starting packet start int64_t cur_frame_end[AV_PARSER_PTS_NB]; diff --git a/libavcodec/parser.c b/libavcodec/parser.c index 1aa86515d..d877f5d41 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -150,6 +150,12 @@ int av_parser_parse2(AVCodecParserContext *s, int index, i; uint8_t dummy_buf[FF_INPUT_BUFFER_PADDING_SIZE]; + if(!(s->flags & PARSER_FLAG_FETCHED_OFFSET)) { + s->next_frame_offset = + s->cur_offset = pos; + s->flags |= PARSER_FLAG_FETCHED_OFFSET; + } + if (buf_size == 0) { /* padding is always necessary even if EOF, so we add it here */ memset(dummy_buf, 0, sizeof(dummy_buf)); diff --git a/libavformat/utils.c b/libavformat/utils.c index a445e0b86..24dbd88fe 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1159,10 +1159,6 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt) }else if(st->need_parsing == AVSTREAM_PARSE_FULL_ONCE){ st->parser->flags |= PARSER_FLAG_ONCE; } - if(st->parser && (s->iformat->flags & AVFMT_GENERIC_INDEX)){ - st->parser->next_frame_offset= - st->parser->cur_offset= st->cur_pkt.pos; - } } } }