summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-07-12 10:30:58 +0200
committerAnton Khirnov <anton@khirnov.net>2022-10-11 11:57:52 +0200
commit8789720d28f55ed72721cb4fe4c20c73e73114fc (patch)
tree40d79a72a3cd42c15a305f254b931620486d3bd7 /libavcodec
parent38cd829dce7184400c944ead299a11e57c8ec7f8 (diff)
lavc/encode: generalize a check for setting dts=pts
DTS may be different from PTS only if both of these are true: - the codec supports reordering - the encoder has delay
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/encode.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libavcodec/encode.c b/libavcodec/encode.c
index b275344bd1..72b92d2548 100644
--- a/libavcodec/encode.c
+++ b/libavcodec/encode.c
@@ -211,7 +211,7 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt,
if (avctx->codec->type == AVMEDIA_TYPE_VIDEO &&
!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY))
- avpkt->pts = avpkt->dts = frame->pts;
+ avpkt->pts = frame->pts;
if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) {
if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) {
if (avpkt->pts == AV_NOPTS_VALUE)
@@ -221,9 +221,12 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt,
frame->nb_samples);
}
}
- if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) {
+
+ // dts equals pts unless there is reordering
+ // there can be no reordering if there is no encoder delay
+ if (!(avctx->codec_descriptor->props & AV_CODEC_PROP_REORDER) ||
+ !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY))
avpkt->dts = avpkt->pts;
- }
} else {
unref:
av_packet_unref(avpkt);