# HG changeset patch # User michael # Date 1169573666 0 # Node ID 1a8d1f66c8673137674c562c96d681a7faf97208 # Parent f813f8755dd165845e698fe5ead5bd977a2985fc make av_find_stream_info() duration user selectable diff -r f813f8755dd1 -r 1a8d1f66c867 avformat.h --- a/avformat.h Tue Jan 23 15:38:07 2007 +0000 +++ b/avformat.h Tue Jan 23 17:34:26 2007 +0000 @@ -373,6 +373,11 @@ int loop_input; /* decoding: size of data to probe; encoding unused */ 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; typedef struct AVPacketList { diff -r f813f8755dd1 -r 1a8d1f66c867 utils.c --- a/utils.c Tue Jan 23 15:38:07 2007 +0000 +++ b/utils.c Tue Jan 23 17:34:26 2007 +0000 @@ -329,6 +329,7 @@ {"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}, {"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}, }; @@ -1757,9 +1758,6 @@ /* absolute maximum size we read until we abort */ #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) static int get_std_framerate(int i){ if(i<60*12) return i*1001; @@ -1942,7 +1940,7 @@ (st->codec->codec_id == CODEC_ID_MPEG4 && !st->need_parsing))*/) 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; } count++;