2012-10-18 19 views
7

Abbiamo un'applicazione che legge un flusso video GigE YUV e lo visualizza sullo schermo. Tramite il profiling, abbiamo appreso che la funzione di conversione di ciascun frame da YUV (UYVY) a RGB24 richiede almeno un ordine di grandezza più tempo e CPU rispetto a qualsiasi altro pezzo della nostra pipeline telecamera-schermo.È possibile eseguire l'accelerazione hardware della conversione YUV -> RGB?

La funzione di conversione che stiamo usando è fornita dal software vendor GigE (Pleora) ed è leggermente più veloce rispetto alla nostra 'ingenuo' implementazione (non ottimizzato). Stiamo utilizzando DirectShow per il resto della nostra pipeline. Il benchmarking del "Task-manager" mostra il nostro stream 1080p a 30fps, un utilizzo della CPU del 4-5% quando saltiamo la conversione (e otteniamo un'immagine confusa ovviamente) e l'utilizzo della CPU del 15-19% quando chiamiamo la funzione di conversione.

Le domande che abbiamo sono:

  1. C'è un filtro DirectShow che farà questa conversione per noi, si spera in modo più performante, piuttosto che basarsi su uno SDK 3a parte o la nostra (CPU- funzione di conversione basata, seriale)?
  2. Questa conversione deve essere eseguita sulla CPU o è in qualche modo in grado di essere scaricata nella GPU per l'elaborazione parallela?

Grazie! Eric.

+0

Il costo deriva dalla lettura e scrittura di ogni byte nell'immagine saturando così la larghezza di banda della memoria. L'elaborazione GPU è utile solo per l'elevato overhead computazionale a bassi rapporti di larghezza di banda. Questo è uno dei vantaggi per le schede video che utilizzano gli overlay YUV. –

risposta

3

La conversione è forse un buon candidato per l'elaborazione GPU, tuttavia che cosa hai intenzione di fare con i dati convertiti? Se ne hai bisogno per un'ulteriore elaborazione nel software, la lettura da scheda video potrebbe rovinare tutto il guadagno che potresti aver ottenuto scaricando l'elaborazione in GPU. Se ne hai bisogno solo a scopo di presentazione, non hai bisogno di convertire, puoi consegnare l'immagine YUV direttamente alla scheda video e lasciarla presentarla in questo modo (che è la configurazione ideale della pipeline, dal momento che non hai nessuna conversione).

Parlando di software di conversione, non sono sicuro circa la qualità delle conversioni che si sta utilizzando in questo momento, tuttavia ci sono altamente ottimizzato (SIMD-abilitato) conversioni disponibili:

  1. standard di Windows Vista + DMO
  2. libswscale
  3. Intel IPP Primitives di FFmpeg

Tutti e tre sono più o meno facilmente inseribili nella conduttura DirectShow. Inoltre, le immagini ad alta risoluzione sono buone candidate anche per l'elaborazione parallela del software.

+0

Grazie! Risposta eccellente e chiara. L'output finale sarà un D3DImage WPF, che come ho capito deve essere una superficie Direct32 RGB32, quindi chiedere alla scheda video di visualizzarlo come YUV non sarà un'opzione. Daremo un'occhiata alle tre librerie consigliate e la consideriamo la migliore soluzione possibile. – user1757226

Problemi correlati