From 1c2beff04a661b398266a8655c6e55ab47791002 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 24 Jul 2012 17:34:13 +0200 Subject: [PATCH] lavf: Set pos for all packets of AVSTREAM_PARSE_FULL_RAW files. Signed-off-by: Michael Niedermayer --- libavformat/avformat.h | 4 +++- libavformat/utils.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) 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))