avformat/utils: reject poorly fitting rfps values earlier
This avoids collecting statistics for rfps values that very likely will get rejected later. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							parent
							
								
									ba189b1db4
								
							
						
					
					
						commit
						1770da18f7
					
				@ -2719,6 +2719,7 @@ int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
 | 
			
		||||
//         if(st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
 | 
			
		||||
//             av_log(NULL, AV_LOG_ERROR, "%f\n", dts);
 | 
			
		||||
        for (i=0; i<MAX_STD_TIMEBASES; i++) {
 | 
			
		||||
            if (st->info->duration_error[0][1][i] < 1e10) {
 | 
			
		||||
                int framerate= get_std_framerate(i);
 | 
			
		||||
                double sdts= dts*framerate/(1001*12);
 | 
			
		||||
                for(j=0; j<2; j++){
 | 
			
		||||
@ -2728,7 +2729,26 @@ int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
 | 
			
		||||
                    st->info->duration_error[j][1][i] += error*error;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        st->info->duration_count++;
 | 
			
		||||
 | 
			
		||||
        if (st->info->duration_count % 10 == 0) {
 | 
			
		||||
            int n = st->info->duration_count;
 | 
			
		||||
            for (i=0; i<MAX_STD_TIMEBASES; i++) {
 | 
			
		||||
                if (st->info->duration_error[0][1][i] < 1e10) {
 | 
			
		||||
                    int framerate= get_std_framerate(i);
 | 
			
		||||
                    double a0     = st->info->duration_error[0][0][i] / n;
 | 
			
		||||
                    double error0 = st->info->duration_error[0][1][i] / n - a0*a0;
 | 
			
		||||
                    double a1     = st->info->duration_error[1][0][i] / n;
 | 
			
		||||
                    double error1 = st->info->duration_error[1][1][i] / n - a1*a1;
 | 
			
		||||
                    if (error0 > 0.04 && error1 > 0.04) {
 | 
			
		||||
                        st->info->duration_error[0][1][i] = 2e10;
 | 
			
		||||
                        st->info->duration_error[1][1][i] = 2e10;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // ignore the first 4 values, they might have some random jitter
 | 
			
		||||
        if (st->info->duration_count > 3 && is_relative(ts) == is_relative(last))
 | 
			
		||||
            st->info->duration_gcd = av_gcd(st->info->duration_gcd, duration);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user