Detect NI-avi at playtime like mplayer.

Fixes Ticket333

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2011-08-03 17:44:50 +02:00
parent 652c772981
commit 46eaaad8dd

View File

@ -73,6 +73,7 @@ typedef struct {
int odml_depth;
int use_odml;
#define MAX_ODML_DEPTH 1000
int64_t dts_max;
} AVIContext;
@ -1168,6 +1169,16 @@ resync:
}
ast->seek_pos= 0;
if(!avi->non_interleaved && st->nb_index_entries>1){
int64_t dts= av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q);
if(avi->dts_max - dts > 2*AV_TIME_BASE){
avi->non_interleaved= 1;
av_log(s, AV_LOG_INFO, "Switching to NI mode, due to poor interleaving\n");
}else if(avi->dts_max < dts)
avi->dts_max = dts;
}
return size;
}
@ -1407,6 +1418,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
/* do the seek */
avio_seek(s->pb, pos_min, SEEK_SET);
avi->stream_index= -1;
avi->dts_max= INT_MIN;
return 0;
}