2012-10-18 58 views
7

Mamy aplikację, która odczytuje strumień wideo GigE YUV i wyświetla go na ekranie. Dzięki profilowaniu dowiedzieliśmy się, że funkcja konwertująca każdą ramkę z YUV (UYVY) na RGB24 zajmuje co najmniej o rząd wielkości więcej czasu i procesora niż jakikolwiek inny element naszego potoku od kamery do ekranu.Czy YUV -> Konwersja RGB może być przyspieszana sprzętowo?

Funkcja konwersji używamy jest dostarczany przez dostawcę oprogramowania GigE (Pleora) i jest nieco szybciej niż nasz własny „naiwnej” (non-zoptymalizowany) realizacji. Używamy DirectShow do końca naszego potoku. "Benchmarking Task-Managera" pokazuje nasz strumień 1080p 30fps, użycie procesora 4-5%, gdy pominiemy konwersję (i otrzymamy nieczytelny obraz oczywiście) i 15-19% użycia procesora, gdy wywołasz funkcję konwersji.

pytania mamy to:

  1. Czy istnieje filtr DirectShow, który zrobi to za nas nawrócenia, miejmy nadzieję, w bardziej wydajnych sposób, zamiast polegać na 3rd SDK firmy lub własnej (czynności znacznie obciążające procesor na podstawie, szeregowej) funkcji konwersji?
  2. Czy ta konwersja musi być wykonana na procesorze, czy może w jakiś sposób można ją przeładować na procesor graficzny w celu przetwarzania równoległego?

Dzięki! Eric.

+0

Koszt pochodzi z odczytywania i zapisywania każdego bajtu na obrazie, co powoduje nasycenie przepustowości pamięci. Przetwarzanie GPU jest korzystne tylko w przypadku wysokich nakładów obliczeniowych na niskie przepustowości. Jest to jedna z korzyści kart graficznych korzystających z nakładek YUV. –

Odpowiedz

3

Konwersja jest prawdopodobnie dobrym kandydatem do przetwarzania GPU, ale co zrobisz z przekonwertowanymi danymi? Jeśli potrzebujesz go do dalszego przetwarzania w oprogramowaniu, odczytanie z karty wideo może zrujnować wszystkie zyski, jakie możesz uzyskać, odkładając przetwarzanie na GPU. Jeśli potrzebujesz go tylko do celów prezentacji, nie musisz konwertować, możesz dostarczyć obraz YUV bezpośrednio do adaptera wideo i pozwolić mu go wyświetlać w ten sposób (co jest idealną konfiguracją potoku, ponieważ nie masz jakakolwiek konwersja w ogóle).

Mówiąc o konwersji oprogramowania, nie jestem pewien co do jakości konwersji używasz teraz, jednak nie są zoptymalizowane (SIMD-włączony) przeliczanie dostępne:

  1. Standardowy Windows Vista + DMO
  2. libswscale
  3. Intel IPP prymitywów FFmpeg

Wszystkie trzy są mniej lub bardziej łatwo wtykowy do rurociągu DirectShow. Dodatkowo obrazy o wysokiej rozdzielczości są dobrymi kandydatami do równoległego przetwarzania oprogramowania.

+0

Dzięki! Doskonała i jasna odpowiedź. Ostatecznym wyjściem będzie plik D3DImage WPF, który, jak rozumiem, musi być powierzchnią Direct3D RGB32, więc prośba karty graficznej o jej wyświetlanie jako YUV nie będzie dostępna. Rzucam okiem na trzy polecane przez ciebie biblioteki i uznają to za najlepsze możliwe rozwiązanie. – user1757226