Codici FOURCC

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

A molti formati multimediali digitali sono assegnati codici FOURCC. 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 di 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'.

L'inversione dell'ordine è necessaria 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 sottotipo

Un intervallo di 2*32 GUID è riservato per la rappresentazione di FOURCCC. Questi GUID sono tutti nel formato XXXXXXXX-0000-0010-8000-00AA00389B71 in cui XXXXXXXX è il codice FOURCC. Di conseguenza, il GUID del 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