簡體   English   中英

Media Foundation錯誤地將靜止圖像捕獲流描述符標記為視頻捕獲

[英]Media Foundation is incorrectly marking still image capture stream descriptors as video capture

我正在以兩種不同的方式(請考慮兩個應用程序)從網絡攝像頭捕獲視頻:使用Direct Show和Media Foundation。

使用Direct Show,我的Logitech c920網絡攝像頭具有3個輸出引腳:

  1. I420,RGB24和MJPG像素格式的視頻捕獲(即PIN_CATEGORY_CAPTUREPIN_CATEGORY_PREVIEW ),FPS為2到30,具體取決於媒體類型。
  2. 在I420和RGB24中以1 FPS拍攝靜態圖像(即PIN_CATEGORY_STILL )。
  3. 在h264中以5到30的FPS進行視頻捕獲(即PIN_CATEGORY_CAPTUREPIN_CATEGORY_PREVIEW )。

因此,由於我只關注視頻捕獲,因此我忽略了所有非PIN_CATEGORY_CAPTUREPIN_CATEGORY_PREVIEW ,這很好用。

使用Media Foundation,同一台攝像機具有3個流描述符( IMFPresentationDescriptor::GetStreamDescriptorCount )。 每個流描述符都提供IMFMediaTypeHandler ,它允許您遍歷媒體類型。 所以我有3個IMFMediaTypeHandlers:

  1. I420,RGB24和MJPG像素格式的視頻捕獲(即IMFMediaTypeHandler::GetMajorType == MFMediaType_Video ),根據媒體類型,FPS為2到30。
  2. i420和RGB24中的視頻捕獲(即IMFMediaTypeHandler::GetMajorType == MFMediaType_Video )只有1 FPS。
  3. h264中的視頻捕獲(即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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM