@ -2618,7 +2618,7 @@ static int has_duration(AVFormatContext *ic)
static void update_stream_timings ( AVFormatContext * ic )
{
int64_t start_time , start_time1 , start_time_text , end_time , end_time1 , end_time_text ;
int64_t duration , duration1 , filesize ;
int64_t duration , duration1 , duration_text , filesize ;
int i ;
AVStream * st ;
AVProgram * p ;
@ -2628,6 +2628,8 @@ static void update_stream_timings(AVFormatContext *ic)
end_time = INT64_MIN ;
end_time_text = INT64_MIN ;
duration = INT64_MIN ;
duration_text = INT64_MIN ;
for ( i = 0 ; i < ic - > nb_streams ; i + + ) {
st = ic - > streams [ i ] ;
if ( st - > start_time ! = AV_NOPTS_VALUE & & st - > time_base . den ) {
@ -2658,7 +2660,10 @@ static void update_stream_timings(AVFormatContext *ic)
if ( st - > duration ! = AV_NOPTS_VALUE ) {
duration1 = av_rescale_q ( st - > duration , st - > time_base ,
AV_TIME_BASE_Q ) ;
duration = FFMAX ( duration , duration1 ) ;
if ( st - > codecpar - > codec_type = = AVMEDIA_TYPE_SUBTITLE | | st - > codecpar - > codec_type = = AVMEDIA_TYPE_DATA )
duration_text = FFMAX ( duration_text , duration1 ) ;
else
duration = FFMAX ( duration , duration1 ) ;
}
}
if ( start_time = = INT64_MAX | | ( start_time > start_time_text & & start_time - start_time_text < AV_TIME_BASE ) )
@ -2672,6 +2677,11 @@ static void update_stream_timings(AVFormatContext *ic)
av_log ( ic , AV_LOG_VERBOSE , " Ignoring outlier non primary stream endtime %f \n " , end_time_text / ( float ) AV_TIME_BASE ) ;
}
if ( duration = = INT64_MIN | | ( duration < duration_text & & duration_text - duration < AV_TIME_BASE ) )
duration = duration_text ;
else if ( duration < duration_text )
av_log ( ic , AV_LOG_VERBOSE , " Ignoring outlier non primary stream duration %f \n " , duration_text / ( float ) AV_TIME_BASE ) ;
if ( start_time ! = INT64_MAX ) {
ic - > start_time = start_time ;
if ( end_time ! = INT64_MIN ) {