mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-17 21:14:47 +00:00
the next r_frame_rate try ...
discard first duration accumulate remaining durations add 15000/1001 and 12000/1001 Originally committed as revision 7289 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e828d257e7
commit
fd97f6a2ea
@ -1760,10 +1760,10 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size)
|
||||
/* maximum duration until we stop analysing the stream */
|
||||
#define MAX_STREAM_DURATION ((int)(AV_TIME_BASE * 3.0))
|
||||
|
||||
#define MAX_STD_TIMEBASES (60*12+3)
|
||||
#define MAX_STD_TIMEBASES (60*12+5)
|
||||
static int get_std_framerate(int i){
|
||||
if(i<60*12) return i*1001;
|
||||
else return ((int[]){24,30,60})[i-60*12]*1000*12;
|
||||
else return ((int[]){24,30,60,12,15})[i-60*12]*1000*12;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1894,18 +1894,21 @@ int av_find_stream_info(AVFormatContext *ic)
|
||||
|
||||
// if(st->codec->codec_type == CODEC_TYPE_VIDEO)
|
||||
// av_log(NULL, AV_LOG_ERROR, "%f\n", dur);
|
||||
if(duration_count[index] > 0){
|
||||
for(i=1; i<MAX_STD_TIMEBASES; i++){
|
||||
int framerate= get_std_framerate(i);
|
||||
int ticks= lrintf(dur*framerate/(1001*12));
|
||||
double error= dur - ticks*1001*12/(double)framerate;
|
||||
duration_error[index][i] += error*error;
|
||||
}
|
||||
}
|
||||
duration_count[index]++;
|
||||
|
||||
if(st->codec_info_nb_frames == 0 && 0)
|
||||
st->codec_info_duration += duration;
|
||||
}
|
||||
last_dts[pkt->stream_index]= pkt->dts;
|
||||
if(last == AV_NOPTS_VALUE || duration_count[index]<=1)
|
||||
last_dts[pkt->stream_index]= pkt->dts;
|
||||
}
|
||||
if(st->parser && st->parser->parser->split && !st->codec->extradata){
|
||||
int i= st->parser->parser->split(st->codec, pkt->data, pkt->size);
|
||||
|
Loading…
Reference in New Issue
Block a user