From 1067c5a2d3a7c75439574cd8d095a0a6ba966ccb Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Wed, 29 Apr 2020 18:19:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=8D=E4=BC=98=E5=8C=96dts=E8=8E=B7?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/Stamp.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Common/Stamp.cpp b/src/Common/Stamp.cpp index b537e8fe..ecc52e81 100644 --- a/src/Common/Stamp.cpp +++ b/src/Common/Stamp.cpp @@ -91,27 +91,29 @@ int64_t Stamp::getRelativeStamp() const { return _relativeStamp; } - bool DtsGenerator::getDts(uint32_t pts, uint32_t &dts){ bool ret = false; - if(pts == _last_pts){ + if (pts == _last_pts) { //pts未变,说明dts也不会变,返回上次dts - if(_last_dts){ + if (_last_dts) { dts = _last_dts; ret = true; } - return ret; + } else { + //pts变了,尝试计算dts + ret = getDts_l(pts, dts); + if (ret) { + //获取到了dts,保存本次结果 + _last_dts = dts; + } } - ret = getDts_l(pts,dts); - if(ret){ - //获取到了dts,保存本次结果 - _last_dts = dts; - }else{ + if (!ret) { //pts排序列队长度还不知道,也就是不知道有没有B帧, //那么先强制dts == pts,这样可能导致有B帧的情况下,起始画面有几帧回退 dts = pts; } + //记录上次pts _last_pts = pts; return ret;