diff options
| author | Anton Khirnov <[email protected]> | 2022-07-12 10:30:58 +0200 | 
|---|---|---|
| committer | Anton Khirnov <[email protected]> | 2022-10-11 11:57:52 +0200 | 
| commit | 8789720d28f55ed72721cb4fe4c20c73e73114fc (patch) | |
| tree | 40d79a72a3cd42c15a305f254b931620486d3bd7 | |
| parent | 38cd829dce7184400c944ead299a11e57c8ec7f8 (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
| -rw-r--r-- | libavcodec/encode.c | 9 | 
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);  | 
