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'));
Tópicos relacionados