1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00

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
This commit is contained in:
Anton Khirnov 2022-07-12 10:30:58 +02:00
parent 38cd829dce
commit 8789720d28

View File

@ -211,7 +211,7 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt,
if (avctx->codec->type == AVMEDIA_TYPE_VIDEO && if (avctx->codec->type == AVMEDIA_TYPE_VIDEO &&
!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) !(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->capabilities & AV_CODEC_CAP_DELAY)) {
if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) {
if (avpkt->pts == AV_NOPTS_VALUE) if (avpkt->pts == AV_NOPTS_VALUE)
@ -221,9 +221,12 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt,
frame->nb_samples); 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; avpkt->dts = avpkt->pts;
}
} else { } else {
unref: unref:
av_packet_unref(avpkt); av_packet_unref(avpkt);