aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chinen <mchinen@gmail.com>2010-09-27 22:17:58 +0000
committerCarl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at>2010-09-27 22:17:58 +0000
commit59cb40b92194c272c4d097c702a46f90edb94958 (patch)
treead8f74c29dd0b6008e59f3780bdfb43d522b026d
parentc6625ad5410389f6bca582b53b23bcd60030e00c (diff)
downloadffmpeg-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.h2
-rw-r--r--libavcodec/parser.c6
-rw-r--r--libavformat/utils.c4
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;
- }
}
}
}