2012-10-18 94 views
7

我們有一個讀取GigE YUV視頻流並將其顯示在屏幕上的應用程序。通過分析,我們已經瞭解到,從功能YUV(UYVY)到RGB24將每幀至少服用的數量更多的時間和CPU的時間比其他任何一件我們的鏡頭到屏幕的管道。YUV - > RGB轉換可以硬件加速嗎?

我們正在使用的轉換功能通過千兆以太網軟件供應商(Pleora)提供的,比我們自己的「天真」(非優化的)執行速度稍快。我們正在爲我們的其餘管道使用DirectShow。 「任務管理標杆」顯示了我們的1080P 30幀流,當我們跳過轉換(並獲得當然亂碼圖像)4-5%的一個CPU使用率,以及15-19%的CPU使用率,當我們調用轉換功能。

的問題,我們已經是:

  1. 有一個DirectShow Filter,會爲我們做這種轉換,希望能在一個更高性能的方式,而不是依賴於第三方SDK或我們自己的(CPU-基於串行)的轉換功能?
  2. 必須在這個轉換在CPU上進行,或者是它在某種程度上可以被卸載到GPU的並行處理?

謝謝!埃裏克。

+0

的成本來自讀取和圖像寫入每個字節從而飽和的內存帶寬。 GPU處理僅對於低帶寬比率的高計算開銷是有利的。這是採用YUV疊加的視頻卡的好處之一。 –

回答

3

轉換也許是GPU處理一個很好的候選人,但是你有什麼打算與轉換後的數據呢?如果您需要軟件進行進一步處理,那麼從視頻適配器讀回可能會破壞將處理卸載到GPU可能獲得的所有增益。如果您只是爲了演示目的而需要它,那麼您不需要轉換,您可以將YUV圖像傳送到視頻適配器並讓它以這種方式呈現(這是管道的理想配置,因爲您沒有任何轉換)。

談到軟件轉換,我不知道你正在使用的是現在的轉換質量,但有高度優化的(啓用的SIMD)可轉換:

  1. 標準的Windows Vista + DMO
  2. FFmpeg的libswscale
  3. 英特爾IPP基元

這三種方法都或多或少容易可插入DirectShow的管道。此外,高分辨率圖像也是並行軟件處理的理想選擇。

+0

謝謝!優秀和明確的答覆。 最終輸出將是一個WPF D3DImage,其據我所知它必須是一個Direct3D RGB32表面,因此,要求將視頻卡以將其顯示爲YUV不會是一種選擇。我會看看你推薦的三個庫,並將其作爲最好的解決方案。 – user1757226