Коды 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'));
Связанные темы