mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 12:36:41 +08:00 
			
		
		
		
	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:
		| @@ -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++; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Michael Niedermayer
					Michael Niedermayer