繁体   English   中英

哪种CMTime无效?

[英]What kinds of CMTime are invalid?

kCMTimeInvalid是无效的CMTime,但是基于Apple文档,还有更多无效的CMTime,它们是什么? CMTime“无效”是什么意思? 它溢出,未启动还是其他?

https://developer.apple.com/documentation/coremedia/kcmtimeinvalid

所有字段均为0,因此您可以calloc或填充0来制作很多字段。 不要使用(time == kCMTimeInvalid)对此进行测试,除此以外,还有许多CMTime也是无效的。 请改用CMTIME_IS_INVALID(time)。


我发现CMTime无效的一些情况:

  • 当flags(CMTimeFlags)kCMTimeFlags_Valid未设置时。

    kCMTimeFlags_Valid必须设置,否则CMTime被视为无效。

  • CMTimeAdd的一些操作

+无限+ +无限== +无限

  • -无限+-无限==-无限
  • +无限+-无限==无效
  • -infinity + + infinity ==无效

  • 有五种可能的状态:

    1. + Infinity:这类似于Float.Infinity。 这是一个有效值,仅大于任何有限数。 您怎么使用它? 例如,假设有一个API,可以为您提供有关视频中时间范围(由两个CMTimes标识)的信息。 您可以使用(-Infinity,+ Infinity)调用它,以询问有关整个视频的信息。
    2. -Infinity:这又类似于-Float.Infinity。
    3. 不定的:据我了解,这类似于Float.NaN。 如Apple 建议的那样 ,当您不知道要使用什么值(例如直播时间)时,请使用此选项。 例如,使用无穷大是不正确的,因为实时流不会永远持续下去。 持续时间有限; 我们只是还不知道。
    4. 无效:这是不遵守CMTime规则的CMTime结构。 我认为这意味着零分母或负分母。 由于CMTime是C结构,因此未封装,因此有人可以使用这样的无效值创建一个。 C结构不能具有引发异常或返回nil的初始化程序。
    5. 数值:这是有限值的正常情况。 使用CMTIME_IS_NUMERIC进行检查。 对于上述所有奇怪的情况,它返回false。

    从您发布的文档中可以看到:

    请改用CMTIME_IS_INVALID(time)。

    CMTime.h ,看起来CMTIME_IS_INVALID定义为:

    #define CMTIME_IS_INVALID(time) (! CMTIME_IS_VALID(time))

    并将CMTIME_IS_VALID定义为:

    #define CMTIME_IS_VALID(time) ((Boolean)(((time).flags & kCMTimeFlags_Valid) != 0))

    因此,似乎唯一确定CMTime是否有效的是kCMTimeFlags_Valid标志是否已设置。

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM