簡體   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