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


Коды 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 зарезервирован для представления FOURCC. Эти 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'));

Подтипы аудио

Подтипы видео

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