Originally committed as revision 22745 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
@@ -648,6 +648,8 @@ typedef struct AVFormatContext { | |||||
#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. | #define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. | ||||
#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. | #define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. | ||||
#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS | #define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS | ||||
#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container | |||||
#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled | |||||
int loop_input; | int loop_input; | ||||
/** decoding: size of data to probe; encoding: unused. */ | /** decoding: size of data to probe; encoding: unused. */ | ||||
@@ -46,6 +46,8 @@ static const AVOption options[]={ | |||||
{"fflags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, D|E, "fflags"}, | {"fflags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, D|E, "fflags"}, | ||||
{"ignidx", "ignore index", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_IGNIDX, INT_MIN, INT_MAX, D, "fflags"}, | {"ignidx", "ignore index", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_IGNIDX, INT_MIN, INT_MAX, D, "fflags"}, | ||||
{"genpts", "generate pts", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_GENPTS, INT_MIN, INT_MAX, D, "fflags"}, | {"genpts", "generate pts", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_GENPTS, INT_MIN, INT_MAX, D, "fflags"}, | ||||
{"nofillin", "do not fill in missing values that can be exactly calculated", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_NOFILLIN, INT_MIN, INT_MAX, D, "fflags"}, | |||||
{"noparse", "disable AVParsers, this needs nofillin too", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_NOPARSE, INT_MIN, INT_MAX, D, "fflags"}, | |||||
{"igndts", "ingore dts", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_IGNDTS, INT_MIN, INT_MAX, D, "fflags"}, | {"igndts", "ingore dts", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_IGNDTS, INT_MIN, INT_MAX, D, "fflags"}, | ||||
#if LIBAVFORMAT_VERSION_INT < (53<<16) | #if LIBAVFORMAT_VERSION_INT < (53<<16) | ||||
{"track", " set the track number", OFFSET(track), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, E}, | {"track", " set the track number", OFFSET(track), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, E}, | ||||
@@ -851,6 +851,9 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, | |||||
int num, den, presentation_delayed, delay, i; | int num, den, presentation_delayed, delay, i; | ||||
int64_t offset; | int64_t offset; | ||||
if (s->flags & AVFMT_FLAG_NOFILLIN) | |||||
return; | |||||
if((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE) | if((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE) | ||||
pkt->dts= AV_NOPTS_VALUE; | pkt->dts= AV_NOPTS_VALUE; | ||||
@@ -1108,7 +1111,7 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt) | |||||
s->cur_st = st; | s->cur_st = st; | ||||
st->cur_ptr = st->cur_pkt.data; | st->cur_ptr = st->cur_pkt.data; | ||||
st->cur_len = st->cur_pkt.size; | st->cur_len = st->cur_pkt.size; | ||||
if (st->need_parsing && !st->parser) { | |||||
if (st->need_parsing && !st->parser && !(s->flags & AVFMT_FLAG_NOPARSE)) { | |||||
st->parser = av_parser_init(st->codec->codec_id); | st->parser = av_parser_init(st->codec->codec_id); | ||||
if (!st->parser) { | if (!st->parser) { | ||||
/* no parser available: just output the raw packets */ | /* no parser available: just output the raw packets */ | ||||
@@ -2139,7 +2142,7 @@ int av_find_stream_info(AVFormatContext *ic) | |||||
st->codec->time_base= st->time_base; | st->codec->time_base= st->time_base; | ||||
} | } | ||||
//only for the split stuff | //only for the split stuff | ||||
if (!st->parser) { | |||||
if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE)) { | |||||
st->parser = av_parser_init(st->codec->codec_id); | st->parser = av_parser_init(st->codec->codec_id); | ||||
if(st->need_parsing == AVSTREAM_PARSE_HEADERS && st->parser){ | if(st->need_parsing == AVSTREAM_PARSE_HEADERS && st->parser){ | ||||
st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; | st->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; | ||||