Commit 3b2c232b authored by michael's avatar michael

make av_find_stream_info() duration user selectable


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@7669 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 2eee893c
...@@ -373,6 +373,11 @@ typedef struct AVFormatContext { ...@@ -373,6 +373,11 @@ typedef struct AVFormatContext {
int loop_input; int loop_input;
/* decoding: size of data to probe; encoding unused */ /* decoding: size of data to probe; encoding unused */
unsigned int probesize; unsigned int probesize;
/**
* maximum duration in AV_TIME_BASE units over which the input should be analyzed in av_find_stream_info()
*/
int max_analyze_duration;
} AVFormatContext; } AVFormatContext;
typedef struct AVPacketList { typedef struct AVPacketList {
......
...@@ -329,6 +329,7 @@ static const AVOption options[]={ ...@@ -329,6 +329,7 @@ static const AVOption options[]={
{"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"},
{"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},
{"year", "set the year", OFFSET(year), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, E}, {"year", "set the year", OFFSET(year), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, E},
{"analyzeduration", NULL, OFFSET(max_analyze_duration), FF_OPT_TYPE_INT, 3*AV_TIME_BASE, 0, INT_MAX, D},
{NULL}, {NULL},
}; };
...@@ -1757,9 +1758,6 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size) ...@@ -1757,9 +1758,6 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size)
/* absolute maximum size we read until we abort */ /* absolute maximum size we read until we abort */
#define MAX_READ_SIZE 5000000 #define MAX_READ_SIZE 5000000
/* maximum duration until we stop analysing the stream */
#define MAX_STREAM_DURATION ((int)(AV_TIME_BASE * 3.0))
#define MAX_STD_TIMEBASES (60*12+5) #define MAX_STD_TIMEBASES (60*12+5)
static int get_std_framerate(int i){ static int get_std_framerate(int i){
if(i<60*12) return i*1001; if(i<60*12) return i*1001;
...@@ -1942,7 +1940,7 @@ int av_find_stream_info(AVFormatContext *ic) ...@@ -1942,7 +1940,7 @@ int av_find_stream_info(AVFormatContext *ic)
(st->codec->codec_id == CODEC_ID_MPEG4 && !st->need_parsing))*/) (st->codec->codec_id == CODEC_ID_MPEG4 && !st->need_parsing))*/)
try_decode_frame(st, pkt->data, pkt->size); try_decode_frame(st, pkt->data, pkt->size);
if (av_rescale_q(st->codec_info_duration, st->time_base, AV_TIME_BASE_Q) >= MAX_STREAM_DURATION) { if (av_rescale_q(st->codec_info_duration, st->time_base, AV_TIME_BASE_Q) >= ic->max_analyze_duration) {
break; break;
} }
count++; count++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment