Share via


Códigos FOURCC

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Muitos formatos de mídia digital têm códigos FOURCC atribuídos a eles. Um código FOURCC é um inteiro sem sinal de 32 bits criado pela concatenação de quatro caracteres ASCII. Por exemplo, o código FOURCC para vídeo YUY2 é 'YUY2'. Para formatos de vídeo compactados e formatos de vídeo não RGB (como YUV), o membro biCompression da estrutura BITMAPINFOHEADER deve ser definido como o código FOURCC.

Há várias macros C/C++ que facilitam a declaração de valores FOURCC no código-fonte. Por exemplo, a macro MAKEFOURCC é declarada em Mmsystem.h e a macro FCC é declarada em Aviriff.h. Use-os da seguinte maneira:

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

Você também pode declarar um código FOURCC diretamente como um literal de cadeia de caracteres simplesmente invertendo a ordem dos caracteres. Por exemplo:

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

A reversão da ordem é necessária porque o sistema operacional Microsoft Windows usa uma arquitetura little-endian. 'Y' = 0x59, 'U' = 0x55 e '2' = 0x32, portanto, '2YUY' é 0x32595559.

Convertendo códigos FOURCC em GUIDs de subtipo

Um intervalo de 2*32 GUIDs é reservado para representar FOURCCs. Esses GUIDs são todos do formulário XXXXXXXX-0000-0010-8000-00AA00389B71 em que XXXXXXXX é o código FOURCC. Portanto, o GUID do subtipo para YUY2 é 32595559-0000-0010-8000-00AA00389B71.

Muitos desses GUIDs já estão definidos no arquivo de cabeçalho Uuids.h. Por exemplo, o subtipo YUY2 é definido como MEDIASUBTYPE_YUY2. A biblioteca de classes base do DirectShow também fornece uma classe auxiliar, FOURCCMap, que pode ser usada para converter códigos FOURCC em valores GUID. O construtor FOURCCMap usa um código FOURCC como um parâmetro de entrada. Em seguida, você pode converter o objeto FOURCCMap no GUID correspondente:

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

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

Subtipos de áudio

Subtipos de vídeo

Trabalhando com codecs