summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-05-07 18:50:15 +0200
committerAnton Khirnov <anton@khirnov.net>2023-05-15 13:32:02 +0200
commitab223a4d8cdcbf3b7b6b9b6c3ecc95203a342f5c (patch)
tree3691581dbedee3f4b75ac556044d3f3820995426
parent2ab9f247f7feb23bc9765dcbcc574687552fcea6 (diff)
downloadffmpeg-ab223a4d8cdcbf3b7b6b9b6c3ecc95203a342f5c.tar.gz
fftools/ffmpeg: stop accessing input format from decoding code
Export the corresponding flag in InputFile instead. This will allow making the demuxer AVFormatContext private in future commits, similarly to what was previously done for muxers.
-rw-r--r--fftools/ffmpeg.c5
-rw-r--r--fftools/ffmpeg.h3
-rw-r--r--fftools/ffmpeg_demux.c2
3 files changed, 7 insertions, 3 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 092c5e179a..45efa75047 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -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
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index d1af94590d..5863ca1faf 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -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 */
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 2822f0ab7f..581990fdf2 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -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);