FOURCC 代码

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

许多数字媒体格式都分配有 FOURCC 代码。 FOURCC 代码是通过串联四个 ASCII 字符创建的 32 位无符号整数。 例如,YUY2 视频的 FOURCC 代码为“YUY2”。 对于压缩的视频格式和非 RGB 视频格式 ((如 YUV) ),应将 BITMAPINFOHEADER 结构的 biCompression 成员设置为 FOURCC 代码。

可通过各种 C/C++ 宏更轻松地在源代码中声明 FOURCC 值。 例如, MAKEFOURCC 宏在 Mmsystem.h 中声明, FCC 宏在 Aviriff.h 中声明。 按如下所示使用它们:

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

还可以直接将 FOURCC 代码声明为字符串文本,只需反转字符的顺序即可。 例如:

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

需要反转顺序,因为 Microsoft Windows 操作系统使用 little-endian 体系结构。 “Y” = 0x59,“U” = 0x55,“2” = 0x32,因此“2YUY”0x32595559。

将 FOURCC 代码转换为子类型 GUID

保留 2*32 个 GUID 的范围,用于表示 FOURC。 这些 GUID 都是格式 XXXXXXXX-0000-0010-8000-00AA00389B71 ,其中 XXXXXXXX 是 FOURCC 代码。 因此,YUY2 的子类型 GUID 为 32595559-0000-0010-8000-00AA00389B71

其中许多 GUID 已在头文件 Uuids.h 中定义。 例如,YUY2 子类型定义为MEDIASUBTYPE_YUY2。 DirectShow 基类库还提供了一个帮助程序类 FOURCCMap,可用于将 FOURCC 代码转换为 GUID 值。 FOURCCMap 构造函数采用 FOURCC 代码作为输入参数。 然后,可以将 FOURCCMap 对象强制转换为相应的 GUID:

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

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

音频子类型

视频子类型

使用编解码器