Informazioni sul colore estese

Se si conosce qualcosa sul colore RGB, si sa che (255, 255, 255) è il triplo RGB a 8 bit per il bianco. Ma qual è il colore effettivo definito da questo tripletto?

La risposta può essere sorprendente: senza altre informazioni, 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 conosciamo il colore.

Uno spazio colore definisce la modalità di riproduzione della rappresentazione numerica di un determinato valore di colore 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 dal colore. 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 colore 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 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 a colori. Le primarie di colore definiscono il modo in cui i valori tristimuli CIE XYZ vengono rappresentati come componenti RGB. In effetti, le primarie dei colori 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 meno risoluzione 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 campionato il cromatico, la posizione dei campioni cromatici 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 della 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 disponibili 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_PRESENT 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 AMCONTROL_xxx flag.

  • 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 sullo spazio dei colori vengono archiviate come attributi nel tipo di supporto:

    Informazioni sul colore Attributo
    Primarie a colori MF_MT_VIDEO_PRIMARIES
    Funzione di trasferimento MF_MT_TRANSFER_FUNCTION
    Matrice di trasferimento MF_MT_YUV_MATRIX
    Sottocampionamento cromatico MF_MT_SUBTYPE
    Data da FOURCC, archiviata nella prima DWORD del GUID del sottotipo.
    Cromatica siting MF_MT_VIDEO_CHROMA_SITING
    Intervallo nominale MF_MT_VIDEO_NOMINAL_RANGE

     

Conversione dello spazio colore

La conversione da uno spazio Y'CbCr a un'altra richiede i passaggi seguenti.

  1. Quantizzazione inversa: convertire la rappresentazione Y'CbCr in una rappresentazione PbPr Y', usando l'intervallo nominale di origine.

  2. Upsampling: converte i valori cromatici campionati in 4:4:4 interpolando i valori cromatici.

  3. Conversione da YUV a RGB: convertire da Y'PbPr a R'G'B', usando la matrice di trasferimento di origine.

  4. Funzione di trasferimento inversa: converte R'G'B' non lineare in RGB lineare, usando l'inverso della funzione di trasferimento.

  5. 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.

  6. Funzione di trasferimento: converte RGB lineare in R'G'B non lineare, usando la funzione di trasferimento di destinazione.

  7. Conversione da RGB a YUV: convertire R'G'B' in Y'PbPr, usando la matrice di trasferimento di destinazione.

  8. Downsampling: convertire 4:4:4 in 4:2:2, 4:2:0 o 4:1:1 filtrando i valori cromatici.

  9. 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 dei colori 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 sui colori estesi

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 contenente 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, è possibile che vengano definite 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 sullo spazio dei colori in un tipo di supporto:

  • I convertitori dello spazio dei colori software devono usare le informazioni sullo spazio dei colori durante la selezione di un algoritmo di conversione.
  • I mixer video, ad esempio il mixer EVR (Enhanced Video Renderer), devono usare le informazioni sul colore durante la combinazione di flussi video da diversi tipi di contenuto.
  • Le API di elaborazione video DXVA e DDI consentono al chiamante di specificare le informazioni sullo spazio dei colori. La GPU deve usare queste informazioni quando esegue la combinazione di video hardward.

Tipi di supporti video

Accelerazione video DirectX 2.0