哪些CMTime是无效的?
What kinds of CMTime are invalid?
kCMTimeInvalid是无效的CMTime,但是根据Apple文档,还有更多无效的CMTime,它们是什么?
CMTime "invalid" 是什么意思?是溢出,未启动还是其他?
https://developer.apple.com/documentation/coremedia/kcmtimeinvalid
All fields are 0, so you can calloc or fill with 0's to make lots of them. Do not test against this using (time == kCMTimeInvalid), there are many CMTimes other than this that are also invalid. Use CMTIME_IS_INVALID(time) instead.
我发现了一些 CMTime 无效的情况:
当标志 (CMTimeFlags) kCMTimeFlags_Valid 未设置时。
kCMTimeFlags_Valid Must be set, or the CMTime is considered invalid.
CMTimeAdd的一些操作
+infinity + +infinity == +infinity
-infinity + -infinity == -infinity
+infinity + -infinity == invalid
-infinity + +infinity == invalid
根据您发布的文档,它说:
Use CMTIME_IS_INVALID(time) instead.
从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
标志。
有五种可能的状态:
- +Infinity:这类似于Float.Infinity。这是一个有效值,仅大于任何有限数。你会如何使用它?例如,假设一个 API 为您提供有关视频中时间范围的信息,由两个 CMTime 标识。您可以使用 (-Infinity, +Infinity) 调用它来询问有关整个视频的信息。
- -无穷大:这又类似于-Float.Infinity.
- Indefinite:据我了解,这类似于 Float.NaN。当您不知道要使用什么值时使用它,例如直播流的持续时间,如 Apple suggests。例如,使用无穷大是不正确的,因为直播不会永远持续下去。它的持续时间是有限的;我们只是还不知道。
- 无效:这是一个不遵守CMTime规则的CMTime结构。我认为这意味着诸如零或负分母之类的东西。由于 CMTime 是一个 C 结构,它没有被封装,所以有人可以像这样创建一个具有无效值的结构。 C 结构不能有引发异常或 return nil.
的初始化程序
- 数值:这是有限值的正常情况。使用 CMTIME_IS_NUMERIC 来检查这一点。对于上述所有奇怪的情况,它 return 都是错误的。
kCMTimeInvalid是无效的CMTime,但是根据Apple文档,还有更多无效的CMTime,它们是什么? CMTime "invalid" 是什么意思?是溢出,未启动还是其他?
https://developer.apple.com/documentation/coremedia/kcmtimeinvalid
All fields are 0, so you can calloc or fill with 0's to make lots of them. Do not test against this using (time == kCMTimeInvalid), there are many CMTimes other than this that are also invalid. Use CMTIME_IS_INVALID(time) instead.
我发现了一些 CMTime 无效的情况:
当标志 (CMTimeFlags) kCMTimeFlags_Valid 未设置时。
kCMTimeFlags_Valid Must be set, or the CMTime is considered invalid.
CMTimeAdd的一些操作
+infinity + +infinity == +infinity
-infinity + -infinity == -infinity +infinity + -infinity == invalid -infinity + +infinity == invalid
根据您发布的文档,它说:
Use CMTIME_IS_INVALID(time) instead.
从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
标志。
有五种可能的状态:
- +Infinity:这类似于Float.Infinity。这是一个有效值,仅大于任何有限数。你会如何使用它?例如,假设一个 API 为您提供有关视频中时间范围的信息,由两个 CMTime 标识。您可以使用 (-Infinity, +Infinity) 调用它来询问有关整个视频的信息。
- -无穷大:这又类似于-Float.Infinity.
- Indefinite:据我了解,这类似于 Float.NaN。当您不知道要使用什么值时使用它,例如直播流的持续时间,如 Apple suggests。例如,使用无穷大是不正确的,因为直播不会永远持续下去。它的持续时间是有限的;我们只是还不知道。
- 无效:这是一个不遵守CMTime规则的CMTime结构。我认为这意味着诸如零或负分母之类的东西。由于 CMTime 是一个 C 结构,它没有被封装,所以有人可以像这样创建一个具有无效值的结构。 C 结构不能有引发异常或 return nil. 的初始化程序
- 数值:这是有限值的正常情况。使用 CMTIME_IS_NUMERIC 来检查这一点。对于上述所有奇怪的情况,它 return 都是错误的。