Codici FOURCC

Molti formati multimediali digitali hanno codici FOURCC assegnati a loro. Un codice FOURCC è un intero senza segno a 32 bit creato concatenando quattro caratteri ASCII. Ad esempio, il codice FOURCC per il video YUY2 è "YUY2". Per i formati video compressi e i formati video non RGB (ad esempio YUV), il membro biCompression della struttura BITMAPINFOHEADER deve essere impostato sul codice FOURCC.

Esistono varie macro C/C++ che semplificano la dichiarazione dei valori FOURCC nel codice sorgente. Ad esempio, la macro MAKEFOURCC viene dichiarata in Mmsystem.h e la macro FCC viene dichiarata in Aviriff.h. Usarli come segue:

DWORD fccYUY2 = MAKEFOURCC('Y','U','Y','2');
DWORD fccYUY2 = FCC('YUY2');

È anche possibile dichiarare un codice FOURCC direttamente come valore letterale stringa semplicemente ripristinando l'ordine dei caratteri. Ad esempio:

DWORD fccYUY2 = '2YUY';  // Declares the FOURCC 'YUY2'.

Il ripristino dell'ordine è necessario perché il sistema operativo Microsoft Windows usa un'architettura little-endian. 'Y' = 0x59, 'U' = 0x55 e '2' = 0x32, quindi '2YUY' è 0x32595559.

Conversione di codici FOURCC in GUID sottotipi

Un intervallo di GUID di 2*32 è riservato per rappresentare QUATTROCC. Questi GUID sono tutti i XXXXXXXX-0000-0010-8000-00AA00389B71 moduli in cui XXXXXXXX è il codice FOURCC. Pertanto, il GUID sottotipo per YUY2 è 32595559-0000-0010-8000-00AA00389B71.

Molti di questi GUID sono già definiti nel file di intestazione Uuids.h. Ad esempio, il sottotipo YUY2 viene definito come MEDIASUBTYPE_YUY2. La libreria di classi di base DirectShow fornisce anche una classe helper, FOURCCMap, che può essere usata per convertire i codici FOURCC in valori GUID. Il costruttore FOURCCMap accetta un codice FOURCC come parametro di input. È quindi possibile eseguire il cast dell'oggetto FOURCCMap nel GUID corrispondente:

FOURCCMap fccMap(FCC('YUY2'));
GUID g1 = (GUID)fccMap;

// Equivalent:
GUID g2 = (GUID)FOURCCMap(FCC('YUY2'));

Sottotipi audio

Sottotipi video

Uso dei codec