[FFmpeg-devel] [PATCH 13/13] fftools/ffmpeg: stop using deprecated ticks_per_frame
Anton Khirnov
anton at khirnov.net
Sun May 7 16:32:55 EEST 2023
---
fftools/ffmpeg.c | 13 +++++++------
fftools/ffmpeg.h | 1 +
fftools/ffmpeg_demux.c | 2 ++
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 4e45ab74b9..a731b4bd7d 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1516,12 +1516,13 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo
} else if (pkt->duration) {
ist->next_dts += av_rescale_q(pkt->duration, pkt->time_base, AV_TIME_BASE_Q);
} else if(ist->dec_ctx->framerate.num != 0) {
- int ticks = ist->last_pkt_repeat_pict >= 0 ?
- ist->last_pkt_repeat_pict + 1 :
- ist->dec_ctx->ticks_per_frame;
- ist->next_dts += ((int64_t)AV_TIME_BASE *
- ist->dec_ctx->framerate.den * ticks) /
- ist->dec_ctx->framerate.num / ist->dec_ctx->ticks_per_frame;
+ int fields = (ist->codec_desc &&
+ (ist->codec_desc->props & AV_CODEC_PROP_FIELDS)) ?
+ ist->last_pkt_repeat_pict + 1 : 2;
+ AVRational field_rate = av_mul_q(ist->dec_ctx->framerate,
+ (AVRational){ 2, 1 });
+
+ ist->next_dts += av_rescale_q(fields, av_inv_q(field_rate), AV_TIME_BASE_Q);
}
break;
}
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index b6389d7f99..0cceffbe9b 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -354,6 +354,7 @@ typedef struct InputStream {
AVCodecParameters *par;
AVCodecContext *dec_ctx;
const AVCodec *dec;
+ const AVCodecDescriptor *codec_desc;
AVFrame *decoded_frame;
AVPacket *pkt;
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 26426c7ac1..6f26e4226d 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -941,6 +941,8 @@ static void add_input_streams(const OptionsContext *o, Demuxer *d)
av_log(ist, AV_LOG_ERROR, "Error initializing the decoder context.\n");
exit_program(1);
}
+
+ ist->codec_desc = avcodec_descriptor_get(ist->par->codec_id);
}
}
--
2.39.2
More information about the ffmpeg-devel
mailing list