Browse Source

Detect NI-avi at playtime like mplayer.

Fixes Ticket333

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n0.9
Michael Niedermayer 14 years ago
parent
commit
46eaaad8dd
1 changed files with 12 additions and 0 deletions
  1. +12
    -0
      libavformat/avidec.c

+ 12
- 0
libavformat/avidec.c 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;
}



Loading…
Cancel
Save