Поделиться через


Коды FOURCC

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Многие форматы цифровых носителей имеют коды FOURCC, назначенные им. Код FOURCC — это 32-разрядное целое число без знака, созданное путем объединения четырех символов ASCII. Например, код FOURCC для видео YUY2 — YUY2. Для сжатых форматов видео и форматов видео без RGB (таких как YUV), biCompression член структуры BITMAPINFOHEADER должен иметь код 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 использует небольшую архитектуру. "Y" = 0x59, "U" = 0x55 и "2" = 0x32, поэтому "2YUY" 0x32595559.

Преобразование кодов FOURCC в идентификаторы GUID подтипа

Диапазон 2*32 GUID зарезервирован для представления FOURCCs. Эти идентификаторы GUID представляют собой все формы XXXXXXXX-0000-0010-8000-00AA00389B71, где XXXXXXXX является кодом FOURCC. Таким образом, GUID подтипа для YUY2 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'));

подтипов звука

подтипов видео

Работа с кодеками