diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-05-21 14:32:24 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-05-22 14:59:02 +0200 |
commit | a6b3471c44fd981d3b33ea9050f78a0bc9494c5e (patch) | |
tree | 15fa992cfb494c23d3fd170cb2ef8b3b7a34948d | |
parent | 696452e4c5d217ca784fcfc5397fd12cc7ff2bd6 (diff) | |
download | ffmpeg-a6b3471c44fd981d3b33ea9050f78a0bc9494c5e.tar.gz |
avformat: add needs_parsing type to enable codec TS use.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/avformat.h | 1 | ||||
-rw-r--r-- | libavformat/utils.c | 10 |
2 files changed, 9 insertions, 2 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h index c5d6f5d1f7..19441f8e21 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -574,6 +574,7 @@ 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 */ }; typedef struct AVIndexEntry { diff --git a/libavformat/utils.c b/libavformat/utils.c index ecc5a2e880..86f6dccf66 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1316,6 +1316,8 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; } else if(st->need_parsing == AVSTREAM_PARSE_FULL_ONCE) { st->parser->flags |= PARSER_FLAG_ONCE; + } else if(st->need_parsing == AVSTREAM_PARSE_FULL_RAW) { + st->parser->flags |= PARSER_FLAG_USE_CODEC_TS; } } @@ -2456,8 +2458,12 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) //only for the split stuff if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE)) { st->parser = av_parser_init(st->codec->codec_id); - if(st->need_parsing == AVSTREAM_PARSE_HEADERS && st->parser){ - st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; + if(st->parser){ + if(st->need_parsing == AVSTREAM_PARSE_HEADERS){ + st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; + } else if(st->need_parsing == AVSTREAM_PARSE_FULL_RAW) { + st->parser->flags |= PARSER_FLAG_USE_CODEC_TS; + } } } codec = st->codec->codec ? st->codec->codec : |