Condividi tramite


Codici FOURCC

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

Molti formati multimediali digitali hanno codici FOURCC assegnati. 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. Per 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 2*32 GUID è riservato per la rappresentazione di QUATTROCC. Questi GUID sono tutti XXXXXXXX-0000-0010-8000-00AA00389B71 formato 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 al GUID corrispondente:

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

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

sottotipi audio

sottotipi video

Uso di codec