@@ -976,7 +976,6 @@ static int decode_audio(InputStream *ist, const AVPacket *pkt, int *got_output,
static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *frame)
{
const InputFile *ifile = input_files[ist->file_index];
- const int container_nots = !!(ifile->ctx->iformat->flags & AVFMT_NOTIMESTAMPS);
int64_t codec_duration = 0;
// XXX lavf currently makes up frame durations when they are not provided by
@@ -986,7 +985,7 @@ static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *fr
// durations, then this should be simplified.
// prefer frame duration for containers with timestamps
- if (frame->duration > 0 && !container_nots)
+ if (frame->duration > 0 && !ifile->format_nots)
return frame->duration;
if (ist->dec_ctx->framerate.den && ist->dec_ctx->framerate.num) {
@@ -998,7 +997,7 @@ static int64_t video_duration_estimate(const InputStream *ist, const AVFrame *fr
}
// prefer codec-layer duration for containers without timestamps
- if (codec_duration > 0 && container_nots)
+ if (codec_duration > 0 && ifile->format_nots)
return codec_duration;
// when timestamps are available, repeat last frame's actual duration
@@ -442,6 +442,9 @@ typedef struct InputFile {
int index;
+ // input format has no timestamps
+ int format_nots;
+
AVFormatContext *ctx;
int eof_reached; /* true if eof reached */
int eagain; /* true if last read attempt returned EAGAIN */
@@ -1504,6 +1504,8 @@ int ifile_open(const OptionsContext *o, const char *filename)
d->duration = 0;
d->time_base = (AVRational){ 1, 1 };
+ f->format_nots = !!(ic->iformat->flags & AVFMT_NOTIMESTAMPS);
+
f->readrate = o->readrate ? o->readrate : 0.0;
if (f->readrate < 0.0f) {
av_log(d, AV_LOG_ERROR, "Option -readrate is %0.3f; it must be non-negative.\n", f->readrate);