summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-07-12 14:37:15 +0200
committerAnton Khirnov <anton@khirnov.net>2022-08-23 16:50:33 +0200
commitec8bd87d8d858457c9d3d4327ced170eda6c6c70 (patch)
tree11e7231a2c03fb56d793d48ff52778e062208682
parent64189c1c4ebec2362ac8d0b9bbcedd0230af928f (diff)
lavc/libx264: pass through frame durations to encoded packets
-rw-r--r--libavcodec/libx264.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index 6afa3cdadb..34ba3408aa 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -51,6 +51,7 @@
typedef struct X264Opaque {
int64_t reordered_opaque;
int64_t wallclock;
+ int64_t duration;
} X264Opaque;
typedef struct X264Context {
@@ -372,6 +373,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
x4->reordered_opaque[x4->next_reordered_opaque].wallclock = wallclock;
if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT)
x4->reordered_opaque[x4->next_reordered_opaque].wallclock = av_gettime();
+ x4->reordered_opaque[x4->next_reordered_opaque].duration = frame->duration;
x4->pic.opaque = &x4->reordered_opaque[x4->next_reordered_opaque];
x4->next_reordered_opaque++;
x4->next_reordered_opaque %= x4->nb_reordered_opaque;
@@ -561,6 +563,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) {
ctx->reordered_opaque = out_opaque->reordered_opaque;
wallclock = out_opaque->wallclock;
+ pkt->duration = out_opaque->duration;
} else {
// Unexpected opaque pointer on picture output
ctx->reordered_opaque = 0;