Domanda

Ho implementato una conversione da YUV a RGB tramite uno shader di frammenti scritto nel linguaggio shader di Nvidia. (Y, U e V sono memorizzati in trame separate che vengono combinate tramite multi trame nel mio framment shader). Funziona alla grande con OpenGL, ma con Direct3D non riesco proprio a far apparire l'immagine di output corretta. Sto iniziando a sospettare che Direct3D stia in qualche modo modificando i campioni Y, U e V prima che io abbia la possibilità di fare la mia conversione YUV. Qualcuno sa se Direct3D apporta delle modifiche ai valori memorizzati nelle trame prima che venga eseguito il framment shader e come disabilitarli > ;?

È stato utile?

Soluzione

L'abbiamo capito. :) Fondamentalmente il problema era che mentre le nostre equazioni da YUV a RGB erano corrette, non stavamo campionando correttamente i dati V! Quindi nessuna somma di futzing con le equazioni avrebbe aiutato!

Alla fine, consiglierei la seguente strategia a chiunque tenti di farlo:

1) Imposta R, G e B sul valore di Y. Dovresti ottenere un'immagine in scala di grigi (poiché Y contiene solo luminanza). 2) Quindi, imposta R, G e B su U. Dovresti ottenere colori divertenti! 3) Infine, imposta R, G e B su V. Ancora una volta, dovresti ottenere colori divertenti.

Inoltre, è fondamentale normalizzare correttamente i valori. Controlla il nostro fourcc.org per una discussione sulla corretta normalizzazione YUV.

Altri suggerimenti

L'unico suggerimento che viene in mente è che le trame sono in un formato inappropriato (bassa precisione o compresso).

Puoi descrivere in che modo l'output sembra sbagliato? Qualche possibilità di uno screenshot giusto o sbagliato?

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