Domanda

Qualcuno sa come creare una trama con uno spazio colore YUV in modo da poter ottenere la conversione dello spazio colore da YUV a RGB basata su hardware senza dover usare uno shader di frammenti? Sto usando un NVidia 9400 e non vedo un'evidente estensione GL che sembra fare il trucco. Ho trovato esempi su come utilizzare uno shader di frammenti, ma il progetto a cui sto lavorando attualmente supporta solo OpenGL 1.1 e non ho tempo per convertirlo in 2.0 ed eseguire tutti i test di regressione necessari. Anche questo è indirizzato a Linux. Su altre piattaforme ho usato un'estensione MESA ma non funziona sulla scheda Nvidia.

È stato utile?

Soluzione

Dato che stai bene usando le estensioni, ma sei preoccupato di fare tutto con OpenGL 2.0, considera di fornire un semplice shader di frammenti con l'estensione ARB_fragment_program della vecchia scuola.

In alternativa, puoi utilizzare una libreria come DevIL, ImageMagick o FreeImage per eseguire la conversione per te.

Altri suggerimenti

l'estensione MESA che menzioni è per YCrCb? Se la tua scheda nvidia non la espone, significa che non ha rivelato il supporto per quel formato di trama (è il modo di dire che la scheda lo supporta).

L'unica opzione è fare la conversione del colore al di fuori del blocco filtro texture. (prima di inviare i dati delle trame a GL, o dopo aver ottenuto i valori dal blocco di filtro delle trame)

GL può ancora essere d'aiuto, poiché è possibile eseguire la trasformazione lineare in GL1.1, a condizione che tu abbia le giuste estensioni (estensione del combinatore di texture dot3). Detto questo, è lontano dalla panacea.

Per quello che vale, la implementazione BINK sembra che stia facendo la conversione con la CPU , usando MMX (che sta leggendo tra le righe però). Probabilmente farei lo stesso, convertendomi con SSE prima del caricamento in OpenGL. Una CPU è abbastanza veloce da eseguire ogni frame.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top