Informazioni sui colori estesi
Se si conosce qualcosa sul colore RGB, si sa che (255, 255, 255) è il triplo RGB a 8 bit per il colore bianco. Ma qual è il colore effettivo definito da questa tripletta?
La risposta può essere sorprendente: senza alcune informazioni aggiuntive, questa tripletta non definisce alcun colore particolare! Il significato di qualsiasi valore RGB dipende dallo spazio dei colori. Se non conosciamo lo spazio dei colori, allora in modo rigoroso non sappiamo il colore.
Uno spazio colore definisce il modo in cui la rappresentazione numerica di un determinato valore di colore deve essere riprodotta come luce fisica. Quando il video viene codificato in uno spazio colori ma viene visualizzato in un altro, genera colori distorti, a meno che il video non venga corretto a colori. Per ottenere una fedeltà accurata dei colori, è quindi fondamentale conoscere lo spazio dei colori del video di origine. In precedenza, la pipeline video in Windows non includeva informazioni sullo spazio dei colori previsto. A partire da Windows Vista, DirectShow e Media Foundation supportano informazioni di colore estese nel tipo di supporto. Queste informazioni sono disponibili anche per DirectX Video Acceleration (DXVA).
Il modo standard per descrivere uno spazio di colore matematicamente consiste nell'usare lo spazio dei colori CIE XYZ, definito dalla Commissione internazionale per l'illuminazione (CIE). Non è pratico usare i valori CIE XYZ direttamente nel video, ma lo spazio dei colori CIE XYZ può essere usato come rappresentazione intermedia durante la conversione tra spazi di colore.
Per riprodurre i colori in modo accurato, sono necessarie le informazioni seguenti:
- Primarie di colore. Le primarie di colore definiscono il modo in cui i valori tristimuli CIE XYZ vengono rappresentati come componenti RGB. In effetti, le primarie di colore definiscono il "significato" di un determinato valore RGB.
- Funzione di trasferimento. La funzione di trasferimento è una funzione che converte i valori RGB lineari in valori R'G'B' non lineari. Questa funzione è detta anche correzione gamma.
- Matrice di trasferimento. La matrice di trasferimento definisce la modalità di conversione di R'G'B' in Y'PbPr.
- Campionamento cromatico. La maggior parte dei video YUV viene trasmessa con una risoluzione minore nei componenti cromatici rispetto all'luma. Il campionamento Chroma è indicato dal FOURCC del formato video. Ad esempio, YUY2 è un formato 4:2:2, ovvero i campioni di cromatica vengono campionati orizzontalmente da un fattore pari a 2.
- Cromatico. Quando viene campionata la cromatica, la posizione dei campioni di cromatica rispetto ai campioni luma determina come devono essere interpolati i campioni mancanti.
- Intervallo nominale. L'intervallo nominale definisce il modo in cui i valori Y'PbPr vengono ridimensionati a Y'CbCr.
Spazio colori nei tipi di supporti
DirectShow, Media Foundation e DirectX Video Acceleration (DXVA) hanno modi diversi per rappresentare i formati video. Fortunatamente, è facile tradurre le informazioni sullo spazio dei colori tra loro, perché le enumerazioni pertinenti sono le stesse.
DXVA 1.0: le informazioni sullo spazio dei colori sono fornite nella struttura DXVA_ExtendedFormat.
DXVA 2.0: le informazioni sullo spazio dei colori sono fornite nella struttura DXVA2_ExtendedFormat. Questa struttura è identica alla struttura DXVA 1.0 e il significato dei campi è lo stesso.
DirectShow: le informazioni sullo spazio dei colori sono fornite nella struttura VIDEOINFOHEADER2. Le informazioni vengono archiviate nei 24 bit superiori del campo dwControlFlags . Se sono presenti informazioni sullo spazio dei colori, impostare il flag AMCONTROL_COLORINFO_PREedizione Standard NT in dwControlFlags. Quando questo flag è impostato, il campo dwControlFlags deve essere interpretato come una struttura DXVA_ExtendedFormat, ad eccezione del fatto che i 8 bit inferiori della struttura sono riservati per i flag AMCONTROL_xxx.
Driver di acquisizione video: le informazioni sullo spazio dei colori vengono fornite nella struttura KS_VIDEOINFOHEADER2 . Questa struttura è identica alla struttura VIDEOINFOHEADER2 e il significato dei campi è lo stesso.
Media Foundation: le informazioni relative allo spazio dei colori vengono archiviate come attributi nel tipo di supporto:
Informazioni sul colore Attributo Primarie a colori MF_MT_VIDEO_PRIMARIES Funzione transfer MF_MT_TRANSFER_FUNCTION Matrice di trasferimento MF_MT_YUV_MATRIX Sottocampionamento cromatico MF_MT_SUBTYPE
(Dato dal FOURCC, archiviato nel primo DWORD del GUID del sottotipo.Cromatica siting MF_MT_VIDEO_CHROMA_SITING Intervallo nominale MF_MT_VIDEO_NOMINAL_RANGE
Conversione dello spazio dei colori
La conversione da uno spazio Y'CbCr a un'altra richiede i passaggi seguenti.
Quantizzazione inversa: convertire la rappresentazione Y'CbCr in una rappresentazione Y'PbPr, usando l'intervallo nominale di origine.
Upsampling: converte i valori di cromatica campionati in 4:4:4 interpolando i valori di cromatica.
Conversione da YUV a RGB: convertire da Y'PbPr a R'G'B', usando la matrice di trasferimento di origine.
Funzione di trasferimento inversa: converte R'G'B' non lineare in RGB lineare, usando l'inverso della funzione di trasferimento.
Conversione dello spazio dei colori RGB: usare le primarie dei colori per eseguire la conversione dallo spazio RGB di origine allo spazio RGB di destinazione.
Funzione di trasferimento: converte RGB lineare in R'G'B non lineare, usando la funzione di trasferimento di destinazione.
Conversione da RGB a YUV: convertire R'G'B' in Y'PbPr, usando la matrice di trasferimento di destinazione.
Downsampling: convertire 4:4:4 in 4:2:2, 4:2:0 o 4:1:1 filtrando i valori di cromatica.
Quantizzazione: convertire Y'PbPr in Y'CbCr, usando l'intervallo nominale di destinazione.
I passaggi da 1 a 4 si verificano nello spazio colore di origine e i passaggi da 6 a 9 si verificano nello spazio colore di destinazione. Nell'implementazione effettiva, i passaggi intermedi possono essere approssimativi e i passaggi adiacenti possono essere combinati. In genere esiste un compromesso tra accuratezza e costo di calcolo.
Ad esempio, per eseguire la conversione da RT.601 a RT.709 sono necessarie le fasi seguenti:
Quantizzazione inversa: da Y'CbCr(601) a Y'PbPr(601)
Upsampling: Y'PbPr(601)
DA YUV a RGB: da Y'PbPr(601) a R'G'B'(601)
Funzione di trasferimento inversa: R'G'B'(601) a RGB(601)
Conversione dello spazio dei colori RGB: RGB(601) in RGB(709)
Funzione di trasferimento: RGB(709) a R'G'B'(709)
Da RGB a YUV: da R'G'B'(709) a Y'PbPr(709)
Downsampling: Y'PbPr(709)
Quantizzazione: da Y'PbPr(709) a Y'CbCr(709)
Uso delle informazioni sul colore estese
Per mantenere la fedeltà dei colori in tutta la pipeline, le informazioni sullo spazio dei colori devono essere introdotte nell'origine o nel decodificatore e trasmesse attraverso la pipeline al sink.
Dispositivi di acquisizione video
La maggior parte dei dispositivi di acquisizione analogica usa uno spazio colore ben definito durante l'acquisizione di video. I driver di acquisizione devono offrire un formato con un blocco di formato KS_VIDEOINFOHEADER2 che contiene le informazioni sul colore. Per garantire la compatibilità con le versioni precedenti, il driver deve accettare formati che non contengono le informazioni sul colore. In questo modo il driver funzionerà con i componenti che non accettano le informazioni sul colore estese.
Origini basate su file
Durante l'analisi di un file video, l'origine multimediale (o il filtro parser, in DirectShow) potrebbe essere in grado di fornire alcune informazioni sul colore. Ad esempio, lo strumento di navigazione DVD può determinare lo spazio dei colori in base al contenuto del DVD. Altre informazioni sul colore potrebbero essere disponibili per il decodificatore. Ad esempio, un flusso video elementare MPEG-2 fornisce le informazioni sul colore nel campo sequence_display_extension. Se le informazioni sul colore non sono descritte in modo esplicito nell'origine, potrebbe essere definita in modo implicito dal tipo di contenuto. Ad esempio, le varietà NTSC e PAL del video DV usano spazi di colore diversi. Infine, il decodificatore può usare le informazioni sul colore ottenute dal tipo di supporto dell'origine.
Altri componenti
Altri componenti potrebbero dover usare le informazioni relative allo spazio dei colori in un tipo di supporto:
- I convertitori di spazi di colore software devono usare informazioni sullo spazio dei colori quando si seleziona un algoritmo di conversione.
- I mixer video, ad esempio il mixer EVR (Enhanced Video Renderer), devono usare le informazioni sul colore quando si combinano flussi video da diversi tipi di contenuto.
- Le API di elaborazione video DXVA e le DDI consentono al chiamante di specificare le informazioni sullo spazio dei colori. La GPU deve usare queste informazioni quando esegue la combinazione video hardward.
Argomenti correlati