lavc/libx264: pass through frame durations to encoded packets

This commit is contained in:
Anton Khirnov
2022-07-12 14:37:15 +02:00
parent 782127d876
commit a172b33ebf

View File

@ -52,6 +52,7 @@
typedef struct X264Opaque { typedef struct X264Opaque {
int64_t reordered_opaque; int64_t reordered_opaque;
int64_t wallclock; int64_t wallclock;
int64_t duration;
void *frame_opaque; void *frame_opaque;
AVBufferRef *frame_opaque_ref; AVBufferRef *frame_opaque_ref;
@ -459,6 +460,7 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
} }
opaque->reordered_opaque = frame->reordered_opaque; opaque->reordered_opaque = frame->reordered_opaque;
opaque->duration = frame->duration;
opaque->wallclock = wallclock; opaque->wallclock = wallclock;
if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT) if (ctx->export_side_data & AV_CODEC_EXPORT_DATA_PRFT)
opaque->wallclock = av_gettime(); opaque->wallclock = av_gettime();
@ -612,6 +614,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) { out_opaque < &x4->reordered_opaque[x4->nb_reordered_opaque]) {
ctx->reordered_opaque = out_opaque->reordered_opaque; ctx->reordered_opaque = out_opaque->reordered_opaque;
wallclock = out_opaque->wallclock; wallclock = out_opaque->wallclock;
pkt->duration = out_opaque->duration;
if (ctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { if (ctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
pkt->opaque = out_opaque->frame_opaque; pkt->opaque = out_opaque->frame_opaque;