<div dir="ltr"><div class="gmail_default __reader_view_article_wrap_27828114211655297__" style="font-family:georgia,serif"><div class="gmail_default">Hi guys,</div><div class="gmail_default"><br></div><div class="gmail_default">In av_write_frame()->compute_muxer_pkt_fields()</div><div class="gmail_default"><br></div><div class="gmail_default">we have </div><div class="gmail_default"> if (pkt->dts != AV_NOPTS_VALUE && pkt->pts != AV_NOPTS_VALUE &&<font color="#cc0000"> pkt->pts < pkt->dts</font>) {</div><div class="gmail_default">        av_log(s, AV_LOG_ERROR,</div><div class="gmail_default">               "pts (%s) < dts (%s) in stream %d\n",</div><div class="gmail_default">               av_ts2str(pkt->pts), av_ts2str(pkt->dts),</div><div class="gmail_default">               st->index);</div><div class="gmail_default">        return AVERROR(EINVAL);</div><div class="gmail_default">    }</div><div class="gmail_default"><br></div><div class="gmail_default">May I know why we need DTS <= PTS. I understand a frame need to be decoded before it can be shown.</div><div class="gmail_default"><br></div><div class="gmail_default">Say we has packets in [DTS, PTS]: [10, 0], [11, 2], [12, 3]</div><div class="gmail_default"><br></div><div class="gmail_default">If decoding and display reference different clocks, DTS and PTS can be totally decoupled and above is a valid sequence packets.</div><div class="gmail_default"><br></div><div class="gmail_default">If DTS and PTS reference a same clock which means first packet needed to be decoded at starttime + 10 but display at starttime + 0, of couse it's invalid. So ffmpeg interprets DTS, PTS this way?</div><div class="gmail_default"><br></div><div class="gmail_default"><br></div><div class="gmail_default">Thanks</div></div></div>