diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-07-24 17:34:13 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-25 01:57:25 +0200 |
commit | 1c2beff04a661b398266a8655c6e55ab47791002 (patch) | |
tree | a04785ec976707172e12e11cfea8789149e72e44 | |
parent | 72743aef03f7933f89ede398ca2c2a8a8ab90cd4 (diff) | |
download | ffmpeg-1c2beff04a661b398266a8655c6e55ab47791002.tar.gz |
lavf: Set pos for all packets of AVSTREAM_PARSE_FULL_RAW files.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/avformat.h | 4 | ||||
-rw-r--r-- | libavformat/utils.c | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 1837733097..659bd64681 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -578,7 +578,9 @@ enum AVStreamParseType { AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW=MKTAG(0,'R','A','W'), /**< full parsing and repack with timestamp generation for raw */ + AVSTREAM_PARSE_FULL_RAW=MKTAG(0,'R','A','W'), /**< full parsing and repack with timestamp and position generation by parser for raw + this assumes that each packet in the file contains no demuxer level headers and + just codec level data, otherwise position generaion would fail */ }; typedef struct AVIndexEntry { diff --git a/libavformat/utils.c b/libavformat/utils.c index 4dde821bcf..5759f94838 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1216,6 +1216,9 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index) out_pkt.dts = st->parser->dts; out_pkt.pos = st->parser->pos; + if(st->need_parsing == AVSTREAM_PARSE_FULL_RAW) + out_pkt.pos = st->parser->frame_offset; + if (st->parser->key_frame == 1 || (st->parser->key_frame == -1 && st->parser->pict_type == AV_PICTURE_TYPE_I)) |