diff options
author | Michael Chinen <mchinen@gmail.com> | 2010-09-27 22:17:58 +0000 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at> | 2010-09-27 22:17:58 +0000 |
commit | 59cb40b92194c272c4d097c702a46f90edb94958 (patch) | |
tree | ad8f74c29dd0b6008e59f3780bdfb43d522b026d | |
parent | c6625ad5410389f6bca582b53b23bcd60030e00c (diff) | |
download | ffmpeg-59cb40b92194c272c4d097c702a46f90edb94958.tar.gz |
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
-rw-r--r-- | libavcodec/avcodec.h | 2 | ||||
-rw-r--r-- | libavcodec/parser.c | 6 | ||||
-rw-r--r-- | libavformat/utils.c | 4 |
3 files changed, 8 insertions, 4 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 64a5583230..9f888992c8 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 1aa86515d8..d877f5d411 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 a445e0b861..24dbd88feb 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; - } } } } |