2012-12-19 100 views
0

剛纔我開始了一個與視頻捕捉有關的小工作,我希望所有支持的像素格式都是使用avfoundation的視頻捕捉設備。我使用CMFormatDescriptionGetMediaSubtype函數來獲取mac(CMPixelFormatType)中的像素格式。但我總是得到一個與任何可用像素格式(預定義像素fromat,如:kCMPixelFormat_422YpCbCr8_yuvs)不匹配的值。有沒有其他功能爲此目的..我搜查,但直到現在沒有找到。返回值總是1684890161作爲像素格式類型。如何在mac os中獲取支持的視頻捕捉設備(攝像頭)的像素格式x

我想問實際的事情是:

在Mac的視頻採集設備如何我都支持的像素格式。記住我不是要求編解碼器類型。它需要的像素格式。請幫助..如果可能的話。

在此先感謝..

+1

當您將'1684890161'轉換爲'OSType'時,您將得到四個字符代碼''dmb1',這似乎是一個Matrox特定的硬件壓縮類型,比如運動jpeg。 –

+0

感謝您的回答..它的工作發佈作爲一個答案與一些更多的解釋,以便它可以幫助其他人。 :)還有一件事是爲什麼它沒有在預定義的格式列表中給出。 –

回答

1

要得到所有支持的像素格式,您需要調用CMIOObjectGetPropertyData與第二個參數CMIOObjectPropertyAddress如下:

CMIOObjectPropertyAddress theAddress; 
theAddress.mSelector = kCMIOStreamPropertyFormatDescriptions; 
theAddress.mScope = kCMIOObjectPropertyScopeGlobal; 
theAddress.mElement = 0; 

這會給你的CMFormatDescriptionRef一個CFArray。 然後你遍歷數組,並呼籲:

CMFormatDescriptionGetMediaSubType(yourCMFormatDescriptionRef); 

CMFormatDescriptionGetMediaSubType轉化的'dmb1'一個FourCharacterCode(OSTYPE),這似乎是一個Matrox專用的硬件壓縮類型。

原因是,你不會在CMPixelFormatType enum中找到你的格式,因爲那裏只有那些最常見的格式,而你的格式不是。在Mac上最常見的是kCMPixelFormat_422YpCbCr8kCMPixelFormat_422YpCbCr10,兩者都是原始的8位和10位YUV視頻。

相關問題