![](/img/trans.png)
[英]Media Foundation set video capture frame rate using PROPVARIANT structure
[英]Media Foundation is incorrectly marking still image capture stream descriptors as video capture
我正在以兩種不同的方式(請考慮兩個應用程序)從網絡攝像頭捕獲視頻:使用Direct Show和Media Foundation。
使用Direct Show,我的Logitech c920網絡攝像頭具有3個輸出引腳:
PIN_CATEGORY_CAPTURE
或PIN_CATEGORY_PREVIEW
),FPS為2到30,具體取決於媒體類型。 PIN_CATEGORY_STILL
)。 PIN_CATEGORY_CAPTURE
或PIN_CATEGORY_PREVIEW
)。 因此,由於我只關注視頻捕獲,因此我忽略了所有非PIN_CATEGORY_CAPTURE
或PIN_CATEGORY_PREVIEW
,這很好用。
使用Media Foundation,同一台攝像機具有3個流描述符( IMFPresentationDescriptor::GetStreamDescriptorCount
)。 每個流描述符都提供IMFMediaTypeHandler
,它允許您遍歷媒體類型。 所以我有3個IMFMediaTypeHandlers:
IMFMediaTypeHandler::GetMajorType == MFMediaType_Video
),根據媒體類型,FPS為2到30。 IMFMediaTypeHandler::GetMajorType == MFMediaType_Video
)只有1 FPS。 IMFMediaTypeHandler::GetMajorType == MFMediaType_Video
),FPS為5到30。 您可能會注意到,Media Foundation的流描述符似乎映射到Direct Show的輸出針1到1。除了Direct Foundation所做的對比之外,Media Foundation沒有將流描述符#2標記為靜止圖像捕獲( MFMediaType_Image
)。
靜止圖像捕獲需要與視頻捕獲不同的處理方式,因此,在嘗試使用引腳2中的媒體類型時,我的Direct Show代碼錯誤並且根本不進行任何捕獲。 好吧,我一開始只關心視頻捕獲,所以很好。
但是,即使通過Media Foundation告訴流描述符#2是視頻捕獲,我的Media Foundation代碼也可以與流描述符#2的媒體類型崩潰,該代碼與流描述符#2和#3的所有媒體類型均能完美工作。 Direct Show僅在靜止圖像捕獲時崩潰。
因此,我得到的印象是它是Media Foundation(或Logitech提供的Windows 7網絡攝像頭驅動程序 )有故障,並且在應該時沒有將流描述符#2標記為靜止圖像捕獲,或者我正在檢查錯誤的標志以確定它是否是視頻捕獲或靜止圖像捕獲。 如果是我的錯,那么區分視頻(#1和#3)和靜止圖像(#2)捕獲流描述符的正確方法是什么?
是的,Mediafoundation沒有PIN_CATEGORY_STILL樣式屬性。
也許您可以假設僅捕獲1 fps的媒體類型。
編輯
再做一些研究,有MF_CAPTURE_ENGINE_STREAM_CATEGORY_PHOTO_DEPENDENT
這適用於MFCaptureEngine,適用於Windows 8。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.