diff mbox series

[FFmpeg-devel,13/13] fftools/ffmpeg: stop using deprecated ticks_per_frame

Message ID 20230507133255.20881-13-anton@khirnov.net
State Accepted
Commit a238ba9c3c9987bccb27e9d37fcef2ae8b355aeb
Headers show
Series [FFmpeg-devel,01/13] lavu/frame: extend AVFrame.repeat_pict documentation | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov May 7, 2023, 1:32 p.m. UTC
---
 fftools/ffmpeg.c       | 13 +++++++------
 fftools/ffmpeg.h       |  1 +
 fftools/ffmpeg_demux.c |  2 ++
 3 files changed, 10 insertions(+), 6 deletions(-)
diff mbox series

Patch

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);
     }
 }