DTS和PCR的WrapRound计算方法

 

有时候,我们会遇到一些WrapRound的计算,比如数字电视TS中DTS或PCR的计算,需要考虑WrapRound的问题。
一般方法可以采用判断的方法,比如对于如下的计算:

const __int64 DTS_MOD = 0x200000000;//定义DTS的模
__int64 dts_1, dts_2, value;

//calc dts_1-dts-2
if (dts_1 >= dts-2)
   value = dts_1 - dts_2;
else
   value = DTS_MOD - dts_2 + dts_1;

另外,我们也可以通过如下方法进行计算:
const int DTS_MAX = 0x1ffffffff;//0x1ffffffff 为33位最大值

__int64 dts_1, dts_2, value;

//calc dts_1-dts-2
value = (dts_1 - dts_2) & DTS_MAX;

该方法充分利用了正数和负数在表示上的区别。

后一种方法在可读性差一些,但在运行运行效率上可能会高一些。

你可能感兴趣的:(DTS和PCR的WrapRound计算方法)