Udostępnij za pośrednictwem


Kody FOURCC

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Wiele formatów multimediów cyfrowych ma przypisane kody FOURCC. Kod FOURCC to 32-bitowa liczba całkowita bez znaku, która jest tworzona przez łączenie czterech znaków ASCII. Na przykład kod FOURCC dla wideo YUY2 to "YUY2". W przypadku skompresowanych formatów wideo i formatów wideo innych niż RGB (takich jak YUV) biCompression elementu członkowskiego BITMAPINFOHEADER należy ustawić na kod FOURCC.

Istnieją różne makra języka C/C++, które ułatwiają deklarowanie wartości FOURCC w kodzie źródłowym. Na przykład makro MAKEFOURCC jest zadeklarowane w pliku Mmsystem.h, a makro FCC jest zadeklarowane w pliku Aviriff.h. Użyj ich w następujący sposób:

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

Kod FOURCC można również zadeklarować bezpośrednio jako literał ciągu, odwracając kolejność znaków. Na przykład:

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

Odwrócenie kolejności jest konieczne, ponieważ system operacyjny Microsoft Windows używa architektury nieco endian. "Y" = 0x59, "U" = 0x55 i "2" = 0x32, więc wartość "2YUY" jest 0x32595559.

Konwertowanie kodów FOURCC na identyfikatory GUID podtypu

Zakres 2*32 identyfikatorów GUID jest zarezerwowany do reprezentowania kontrolerów FOURC. Te identyfikatory GUID są XXXXXXXX-0000-0010-8000-00AA00389B71 formularza, w którym XXXXXXXX jest kodem FOURCC. W związku z tym identyfikator GUID podtypu dla yuY2 jest 32595559-0000-0010-8000-00AA00389B71.

Wiele z tych identyfikatorów GUID jest zdefiniowanych już w pliku nagłówka Uuids.h. Na przykład podtyp YUY2 jest zdefiniowany jako MEDIASUBTYPE_YUY2. Biblioteka klas bazowych DirectShow udostępnia również klasę pomocnika FOURCCMap, która może służyć do konwertowania kodów FOURCC na wartości GUID. Konstruktor FOURCCMap przyjmuje kod FOURCC jako parametr wejściowy. Następnie można rzutować obiekt FOURCCMap na odpowiedni identyfikator GUID:

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

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

podtypy audio

podtypy wideo

praca z codecs