make av_find_stream_info() duration user selectable
Originally committed as revision 7669 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									683ab79ca0
								
							
						
					
					
						commit
						a44b3c4da8
					
				@ -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[]={
 | 
				
			|||||||
{"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)
 | 
				
			|||||||
/* 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)
 | 
				
			|||||||
             (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++;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user