Browse Source

lavc/videotoolboxenc: Fix DTS

Some devices output an invalid DTS when B-frames aren't used. Using PTS for
the DTS in this case.

Signed-off-by: Rick Kern <kernrj@gmail.com>
tags/n3.1
Rick Kern wm4 9 years ago
parent
commit
2fbf39382d
1 changed files with 9 additions and 0 deletions
  1. +9
    -0
      libavcodec/videotoolboxenc.c

+ 9
- 0
libavcodec/videotoolboxenc.c View File

@@ -1034,6 +1034,15 @@ static int vtenc_cm_to_avpacket(
pts = CMSampleBufferGetPresentationTimeStamp(sample_buffer);
dts = CMSampleBufferGetDecodeTimeStamp (sample_buffer);

if (CMTIME_IS_INVALID(dts)) {
if (!vtctx->has_b_frames) {
dts = pts;
} else {
av_log(avctx, AV_LOG_ERROR, "DTS is invalid.\n");
return AVERROR_EXTERNAL;
}
}

dts_delta = vtctx->dts_delta >= 0 ? vtctx->dts_delta : 0;
time_base_num = avctx->time_base.num;
pkt->pts = pts.value / time_base_num;


Loading…
Cancel
Save