Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы понять новую схему профиля камеры версии 2, мы начнем с простого объявления профиля и разберем его, чтобы лучше понять его отдельные части.
Мы берем гипотетическую камеру, которая поддерживает новый профиль высокой частоты кадров. Сначала мы определяем некоторые гипотетические ограничения оборудования для нашего устройства.
Значок предварительного просмотра — 0. В KSFILTER_DESCRIPTOR, определяемом драйвером камеры, когда определен массив KSPIN_DESCRIPTOR_EX, первый KSPIN_DESCRIPTOR_EX является дескриптором пин-кода предварительного просмотра. Аналогичным образом, закрепление 1 — закрепление захвата и закрепление 2 — это закрепление фотографии.
Из-за ограничений оборудования данное устройство не может обрабатывать масштабирование на частоте кадров 60 кадров в секунду или больше. Таким образом, потоки предварительной версии и записи должны иметь одинаковое разрешение.
Аналогичным образом устройство также не может обрабатывать преобразование цветового пространства для 60 fps или выше, поэтому подтип должен совпадать между предварительным просмотром и записью.
Камера поддерживает потоковую потоковую передачу видео 4K 16x9 на 60 fps. Камера также может 3840x2880@60fps (4:3 видео на 60 кадров в с).
Камера не может предоставлять какие-либо операции с фотографиями при выполнении в 60 кадров в с.
Помимо профиля высокой частоты кадров мы объявляем профиль записи видео.
Профиль записи видео позволяет использовать любое сочетание типов носителей, но ни один тип не должен превышать 30 кадров в секунду.
Профиль записи видео также поддерживает съёмку одного фото (например, вне последовательности фотографий).
Для декларации на основе INF в разделе DDInstall.Interfaces директива AddReg используется для публикации информации профиля.
Каждому фильтру типа медиа Pin необходимо назначить имя записи реестра. Это имя должно быть MTF#, где # представляет целочисленное значение. Целочисленное значение не должно быть последовательным, просто уникальным, так как оно представляет именованное значение в реестре ОС.
Учитывая эти ограничения, можно объявить следующий профиль:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","BlockedControls",0,"VHDR;VPS;{E0766E84-36A2-4945-906D-092ECBD87445},2;WARM1"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"
; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"
OEMCameraProfileVersion
Чтобы включить поддержку профиля камеры версии 2, объявите версию профиля:
Запись OEMCameraProfileVersion определяет версию профиля и для этой редакции спецификации должна иметь значение 2:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
Если запись реестра OEMCameraProfileVersion отсутствует, а запись OEMCameraProfile присутствует, поток данных возвращается к схеме профиля камеры 1507.
Это обеспечивает обратную совместимость с существующими профилями камеры.
Если запись OEMCameraProfileVersion доступна, все существующие сведения о профиле камеры 1507 игнорируются, и будут обработаны только профиль камеры версии 2.
Примечание. Если запись OEMCameraProfileVersion имеет значение 2, но декларации профиля версии 2 не найдены, профили не будут опубликованы.
После объявления все профили должны храниться в разделе реестра профилей в узле интерфейса устройства.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Каждый профиль должен быть вложенным ключом в разделе "Профили" с помощью идентификатора профиля.
Идентификатор профиля — это сочетание типа профиля, индекса профиля.
Тип профиля может быть одной из следующих строк или может быть строкой {GUID}:
KSCAMERAPROFILE_VideoRecording
KSCAMERAPROFILE_HighQualityPhoto
KSCAMERAPROFILE_BalancedVideoAndPhoto
KSCAMERAPROFILE_VideoConferencing
KSCAMERAPROFILE_PhotoSequence
KSCAMERAPROFILE_FaceAuth_Mode
KSCAMERAPROFILE_HighFrameRate
KSCAMERAPROFILE_HDRWithWCGVideo
KSCAMERAPROFILE_HDRWithWCGPhoto
KSCAMERAPROFILE_VariablePhotoSequence
KSCAMERAPROFILE_VideoHDR8
Индекс профиля может быть любым значением от 0 до 0x7FFFFFFF. Значения индекса с набором битов высокого порядка зарезервированы для внутреннего использования.
Основа профиля камеры версии 2 разбита на две основные записи схемы:
Ограничения профиля
Закрепить фильтры по типам мультимедиа
Ограничение профиля
Общие ограничения профиля — это общее объявление для всего профиля, влияющее на обработку фильтров типов пин-медиа. Это шесть поддерживаемых тегов. Они могут отображаться в любом порядке, разделенном ";":
| Ограничение профиля | Описание |
|---|---|
| Система регистрации и отслеживания (LRS) | Блокировка разрешения на всех пинах. Все контакты, указанные в профиле, должны иметь одинаковое разрешение при активном состоянии. |
| ЛФР | Блокировка частоты кадров на всех штырях. Все пины, объявленные в профиле, должны иметь одинаковую частоту кадров, когда активны. |
| LST | Блокировка подтипа по всем закреплениям. Все пины, указанные в профиле, должны иметь один и тот же подтип, когда они активны. |
| AAR | Примените декларацию профиля уровня Pin ко всем соотношениям сторон. Фильтрация на основе разрешения выполняется с использованием произведения ширины и высоты разрешения, и это произведение используется в качестве значения для сравнения. Однако если тег AAR не задан, сравнение будет выполнено только для разрешения с одинаковым соотношением аспектов. |
| ДИС | Нетрудоспособный. Если это ограничение используется для ограничения профиля, фильтр типа носителя Pin игнорируется и будет признан недопустимым синтаксисом профиля. Этот тег может не сочетаться с другими тегами ограничения профиля. |
| UAR | Разрешить произвольное сочетание пропорций разрешения между закреплениями. По умолчанию соотношения сторон между выводами должны быть одинаковыми. Этот тег удаляет это ограничение по умолчанию. Примечание. Рекомендуется, чтобы приложения поддерживали одинаковые соотношения сторон для всех доступных пинов. |
Если тег UAR не задан в объявлении профиля, все соотношения сторон между контакторами должны быть одинаковыми. В частности, предварительный просмотр потоковой передачи в режиме 16:9 при съемке фото или потоковая передача с использованием элемента захвата в режиме 4:3 не поддерживается. Попытки сделать это приведет к ошибке.
Обработка приведенного выше примера профиля:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
Ограничение профиля указывает, что для профиля [KSCAMERAPROFILE_HighFrameRate,0] разрешения и подтип для всех пинов должны совпадать. Это соответствует аппаратным ограничениям нашей гипотетической камеры (отсутствие масштабирования или преобразования цветового пространства при работе на 60 fps или выше).
Ограничения кодировщика
Необязательный набор ограничений профиля может содержать рекомендуемые параметры кодировщика для приложений, которые выбирают профиль для операций кодирования видео. Например, IHV/OEM может рекомендовать использовать HEVC над H264 для определенных систем, если тип носителя превышает предопределенное пороговое значение с точки зрения разрешения и /или частоты кадров.
Кроме того, поскольку кодировщик HW, присутствующих на компьютере, может обеспечить более оптимальную операцию при настройке параметров кодирования, изготовитель оборудования может выбрать создание профиля с дополнительными указаниями для приложения.
Чтобы упростить эту поддержку, в любой профиль можно добавить следующие дополнительные ограничения.
Предпочтительный подтип в кодировке
Следующий список подтипов — это предпочтительный подтип кодирования для кодировщика:
eSPSubtype_H264
eSPSubtype_HEVC
Эти два ограничения являются взаимоисключающими. Только один может быть объявлен. Указание обоих параметров приведёт к созданию недействительного профиля и его отклонению.
Когда объявлено ограничение предпочтительного кодированного подтипа, атрибутивное хранилище MF в IMFSensorProfile предоставляет объявленный предпочтительный кодированный подтип с атрибутом MF_MT_SUBTYPE.
Предпочтительный профиль кодировщика
Следующий список предпочитаемых профилей кодировщика соответствует перечислению eAVEncH264VProfile.
eSPProfile_Simple
eSPProfile_Base
eSPProfile_Main
eSPProfile_High
eSPProfile_422
eSPProfile_High10
eSPProfile_444
eSPProfile_Extended
eSPProfile_ScalableBase
eSPProfile_ScalableHigh
eSPProfile_MultiviewHigh
eSPProfile_StereoHigh
eSPProfile_ConstrainedBase
eSPProfile_UCConstrainedHigh
eSPProfile_UCScalableConstrainedBase
eSPProfile_UCScalableConstrainedHigh
eSPProfileH265_Main_420_8
eSPProfileH265_Main_420_10
eSPProfileH265_Main_420_12
eSPProfileH265_Main_422_10
eSPProfileH265_Main_422_12
eSPProfileH265_Main_444_8
eSPProfileH265_Main_444_10
eSPProfileH265_Main_444_12
eSPProfileH265_Monochrome_12
eSPProfileH265_Monochrome_16
eSPProfileH265_MainIntra_420_8
eSPProfileH265_MainIntra_420_10
eSPProfileH265_MainIntra_420_12
eSPProfileH265_MainIntra_422_10
eSPProfileH265_MainIntra_422_12
eSPProfileH265_MainIntra_444_8
eSPProfileH265_MainIntra_444_10
eSPProfileH265_MainIntra_444_12
eSPProfileH265_MainIntra_444_12
eSPProfileH265_MainStill_420_8
eSPProfileH265_MainStill_444_8
eSPProfileH265_MainStill_444_16
Приведенное выше объявление предпочтительных профилей кодировщика является взаимоисключающими. Только один может быть объявлен. Объявление более чем одного элемента приведет к недопустимости профиля и его отклонению.
Когда объявлено ограничение предпочтительного профиля кодировщика, хранилище атрибутов MF IMFSensorProfile демонстрирует объявленный предпочтительный профиль кодировщика с атрибутом MF_MT_MPEG2_PROFILE.
ПРИМЕЧАНИЕ. Профили eSPProfileH265 допустимы только для подтипов в кодировке HEVC.
Рекомендуемое число кадров B
Рекомендуемое ограничение количества кадров Bframe позволяет изготовителю оборудования указать рекомендуемое количество кадров B для закодированного видео:
- eSPBFCount_X
Где X представляет число BFrame: например, eSPBFCount_0 указывает 0 BFrame Count.
Когда объявлено рекомендуемое ограничение количества B-кадров, хранилище атрибутов IMFSensorProfile предоставляет объявленное рекомендуемое число B-кадров с атрибутом CODECAPI_AVEncMPVDefaultBPictureCount.
Рекомендуемая скорость бита
Рекомендуемое ограничение скорости битов позволяет изготовителю оборудования указать как среднюю скорость кодирования (при использовании соответствующего режима управления скоростью кодирования), так и (или) максимальную скорость битов:
eSPBitRate_XXXXX
eSPMaxBitRate_XXXXX
Эти два ограничения могут быть указаны независимо или вместе. XXXXX представляет скорость битов в кб/с. Например, eSPBitRate_5000 представляет 5 000 000 бит в секунду.
eSPBitRate_XXXXX, если указано изготовителем оборудования, будет предоставляться через атрибут CODECAPI_AVEncCommonMeanBitRate в хранилище атрибутов MF профиля IMFSensorProfile.
eSPMaxBitRate_XXXXX, при указании OEM, будет предоставляться через хранилище атрибутов MF профиля IMFSensorProfile с использованием CODECAPI_AVEncCommonMaxBitRate.
Пример ограничения кодировщика
В следующем примере INF показано, как OEM может объявить ограничения кодировщика:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","Constraint",0,"eSPSubtype_HEVC;eSPProfile_Main;eSPBFCount_1;eSPBitRate_20000;eSPMaxBitRate_50000"
Приведенное выше ограничение кодировщика приведет к тому, что профиль IMFSensorProfile профиля KSCAMERAPROFILE_VideoRecording, 0 (см. описание API ниже) в хранилище атрибутов MF будет содержать различные атрибуты кодировщика следующим образом:
HRESULT
CheckEncoderParameters(
_In_ IMFSensorProfile* pProfile
)
{
HRESULT hr = S_OK;
ComPtr<IMFAttributes> spAttributes;
GUID guidSubtype = GUID_NULL;
UINT32 eProfile = eAVEncH264VProfile_unknown;
UINT32 uiBFrameCount = 0;
UINT32 uiBitRate = 0;
UINT32 uiMaxBitRate = 0;
if (nullptr == pProfile)
{
return E_INVALIDARG;
}
RETURN_IF_FAILED (pProfile->QueryInterface(IID_PPV_ARGS(&spAttributes)));
if (SUCCEEDED(spAttributes->GetGUID(MF_MT_SUBTYPE, &guidSubtype)))
{
if (guidSubtype == MFVideoFormat_HEVC)
{
// Use HEVC codec.
}
else
{
// Use H264 codec.
}
}
if (SUCCEEDED(spAttributes->GetUINT32(MF_MT_MPEG2_PROFILE, &eProfile)))
{
// Use the eProfile provided for encoder profile.
}
if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncMPVDefaultBPictureCount, &uiBFrameCount)))
{
// This is the BFrame count...
}
if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncCommonMeanBitRate, &uiBitRate)))
{
// This is the average bit rate...
}
if (SUCCEEDED(spAttributes->GetUINT32(CODECAPI_AVEncCommonMaxBitRate, &uiMaxBitRate)))
{
// This is the max bit rate...
}
return hr;
}
На поверхности API WinRT эти же атрибуты могут быть получены через CameraProfile.Properties (см. описание API WinRT ниже).
Заблокированные элементы управления
Заблокированные элементы управления позволяют OEM/IHV выборочно отключить определенные элементы управления камерой на основе выбранного профиля:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","BlockedControls",0,"VHDR;PHSEQ;{E0766E84-36A2-4945-906D-092ECBD87445},2;WARM1"
В приведенном выше примере KSCAMERAPROFILE_HighFrameRate,0 объявляется, что Видео HDR (VHDR), последовательность фотографий (PHSEQ), пользовательский элемент управления, чей KSPROPERTY. Set = {E0766E84-36A2-4945-906D-092ECBD8745} и KSPROPERTY.Id = 2, а теплый запуск на pin1 не поддерживается.
При выборе этого профиля конвейер явно блокирует выдачу этих элементов управления драйверу DMFT/Camera. Это позволяет драйверу DMFT/Camera предоставлять поддержку для всех элементов управления камерой, и конвейер гарантирует, что приложение с помощью профиля камеры не попытается коснуться заблокированных элементов управления.
Заблокированные элементы управления могут быть определены с помощью одного из тегов, приведенных ниже для определенных элементов управления камерой, или может использоваться формат {GUID},id.
| Тег | Описание элемента управления |
|---|---|
| PHSEQ | Расширенный элемент управления камерой — последовательность фотографий Примечание: Блокировка последовательности фотографий также блокирует последовательность переменных фотографий. |
| ТЕПЛЫЙ# | Расширенное управление камерой — управление "Теплый старт". # представляет идентификатор пин-кода, на котором отключается элемент управления "Теплый пуск". |
| СЦЕНА | Расширенный элемент управления камерой — режим сцены. |
| ФАКЕЛ | Расширенное управление камерой — режим фонарика. |
| Флэш | Расширенный элемент управления камерой — режим вспышки. |
| ИСО | Расширенный элемент управления камерой — ISO |
| EVCOMP | Расширенное управление камерой — компенсация EV |
| WBAL | Расширенный элемент управления камерой — баланс белого |
| ЭКСПО | Расширенный элемент управления камерой — экспозиция |
| ФОКУС | Расширенный элемент управления камерой — фокус |
| Рентабельность инвестиций | Расширенный элемент управления камерой — ROI |
| EXTZOOM | Расширенный элемент управления камерой — масштабирование |
| ADVISO | Расширенный элемент управления камерой — улучшенное ISO |
| VIDST | Расширенный элемент управления камерой — стабилизация видео |
| FACEDT | Расширенный элемент управления камерой — обнаружение лиц |
| VHDR | Расширенное управление камерой — видео HDR |
| OIS (Оптическая стабилизация изображения) | Расширенный элемент управления камерой — стабилизация оптического изображения |
| ADVPHOTO | Расширенное управление камерой — продвинутая фотография |
| Аутентификация по лицу | Расширенный элемент управления камерой — проверка подлинности лиц |
| БЕЗОПАСНЫЙ | Расширенный элемент управления камерой — безопасный режим |
| VFP | Расширенное управление камерой — VFR |
Помимо расширенных элементов управления камерой, профили могут также блокировать устаревшие элементы управления в наборах элементов управления PROPSETID_VIDCAP_VIDEOPROCAMP и PROPSETID_VIDCAP_CAMERACONTROL. PROPSETID_VIDCAP_VIDEOPROCAMP элементы управления могут быть заблокированы следующим образом:
VIDPROC#
Где # представляет идентификатор элемента управления:
KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS // 0
KSPROPERTY_VIDEOPROCAMP_CONTRAST // 1
KSPROPERTY_VIDEOPROCAMP_HUE // 2
KSPROPERTY_VIDEOPROCAMP_SATURATION // 3
KSPROPERTY_VIDEOPROCAMP_SHARPNESS // 4
KSPROPERTY_VIDEOPROCAMP_GAMMA // 5
KSPROPERTY_VIDEOPROCAMP_COLORENABLE // 6
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE // 7
KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION // 8
KSPROPERTY_VIDEOPROCAMP_GAIN // 9
KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER // 10
KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT // 11
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT // 12
KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY // 13
Например, VIDPROC13 блокирует элемент управления «Частота линии питания».
Аналогичным образом PROPSETID_VIDCAP_CAMERACONTROL можно заблокировать следующим образом:
CAMCTRL#
Где # представляет идентификатор элемента управления:
KSPROPERTY_CAMERACONTROL_PAN // 0
KSPROPERTY_CAMERACONTROL_TILT // 1
KSPROPERTY_CAMERACONTROL_ROLL // 2
KSPROPERTY_CAMERACONTROL_ZOOM // 3
KSPROPERTY_CAMERACONTROL_EXPOSURE // 4
KSPROPERTY_CAMERACONTROL_IRIS // 5
KSPROPERTY_CAMERACONTROL_FOCUS // 6
KSPROPERTY_CAMERACONTROL_SCANMODE // 7
KSPROPERTY_CAMERACONTROL_PRIVACY // 8
KSPROPERTY_CAMERACONTROL_PANTILT // 9
KSPROPERTY_CAMERACONTROL_PAN_RELATIVE // 10
KSPROPERTY_CAMERACONTROL_TILT_RELATIVE // 11
KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE // 12
KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE // 13
KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE // 14
KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE // 15
KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE // 16
KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE // 17
KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH // 18
KSPROPERTY_CAMERACONTROL_AUTO_EXPOSURE_PRIORITY // 19
Фильтр типа закрепления носителя
Переходим к образцу профиля, мы видим фильтр типа носителя Pin для профиля с высокой частотой кадров.
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"
В приведенном выше разделе Pin0 (контакт предварительного просмотра) профиля высокой частоты кадров, мы разрешаем любое разрешение или частоту кадров, доступные на контакте. Для нашего гипотетического устройства драйвер не будет предоставлять частоту кадров больше 30 кадров для пин-кода предварительного просмотра.
Номера контактов при задании с помощью INF соответствуют индексу с нуля структуры KSPIN_DESCRIPTOR_EX, определенной в структуре KSFILTER_DESCRIPTOR, которую объявляют драйверы мини-портов AVStream.
Чтобы интерпретировать фильтр типа пин-носителя и соответствующий набор фильтров, необходимо определить схему синтаксиса:
В этом определении строки используется следующая схема фильтра типов носителей по пинам. Где показаны [], включенная строка необязательна, в противном случае все строки, объявленные в синтаксисе, являются обязательными (синтаксис ограничения не учитывает регистр):
PinMediaTypeFilter : Pin#:[(!)]|(FilterSet0)(FilterSet1)...(FilterSetN)
FilterSet : [!](ResolutionFilter;FrameRateFilter;FourCCFilter)
Resolution : RES[==|<=|>=|!=]Width,Height
FrameRate : FRT[==|<=|>=|!=]Num,Denom
Subtype : SUT[==|!=]SubtypeValue
SubtypeValue : <See below>
SubtypeValue может иметь форму одного шестнадцатеричного представления значения Four CC (например, 0x3231564E == NV12), {GUID} в случае пользовательского типа носителя (открытые или закрываемые скобки обязательны, а GUID должен иметь вид: {55D24460-45B7-450E-829B-91A94FF84180} или хорошо известный тег (NV12, YUY2 и т. д.)).
Представление {GUID} также может использоваться для подтипов MFVideoFormat_*, если известный подтип не имеет указанного тега.
В нашем примере:
Pin0:((RES==;FRT==;SUT==ALL))
Синтаксический анализ:
Resolution : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate : Ignore all frame rate checks (implies all frame rates are allowed)
Subtype : All
Это семантически: "Разрешить все типы мультимедиа".
См. раздел "Фильтр частоты кадров " ниже для определения отдельных тегов разрешения, частоты кадров и подтипов.
Для Pin1 (пини для захвата) объявление частоты кадров имеет другое значение:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"
Синтаксический анализ:
Resolution : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate : Equal or greater than 60,1
Subtype : All
В этом профиле для Pin1 разрешены только типы мультимедиа с частотой кадров 60 кадров в секунду или выше.
Хотя пин 2 (пин с фотографией) в настоящее время не доступен:
[SampleDriver.CameraInterface.AddReg]
HKR,,"OEMCameraProfileVersion",0x00010001,2
; This is our High Frame Rate Profile.
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","Constraint",0,"LRS;LST"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF1",0,"Pin1:((RES==;FRT>=60,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_HighFrameRate,0","MTF2",0,"Pin2:(!)"
Как подразумевает синтаксис, фильтр по типу медиапотока может быть опционально единственным (!) объявлением, что означает отсутствие поддерживаемых форматов мультимедиа для данного пина (пины без поддерживаемых типов медианосителей будут скрыты для клиента).
Переход к профилю записи видео, опять же, у нас нет ограничений на пин-код предварительного просмотра, так как наша гипотетическая камера предоставляет только 30 fps предварительный просмотр только с типами мультимедиа, которые гарантированно будут одновременными в сценариях записи видео или высокой частоты кадров.
; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"
Но для пина захвата необходимо ограничить это только 30 fps мультимедийных типов, так как мы не можем поддерживать более высокие частоты кадров для различных разрешений между предварительным просмотром и записью, а также операциями фото.
; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"
Это делается с помощью тега "Частота кадров меньше чем" (FRT<=) и указания частоты кадров в 30 кадров в секунду.
Pin1:((RES==;FRT<=30,1;SUT==ALL))
Синтаксический анализ:
Resolution : Ignore all resolution checks (implies all resolutions are allowed)
Frame rate : Equal or less than 30,1
Subtype : All
Для Photo pin мы заявляем, что последовательность фотографий не поддерживается, указывая блокированные элементы управления с PHSEQ в качестве элемента управления, который будет запрещен.
; Declare the Video Recording Profile here.
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","BlockedControls",0,"PHSEQ"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF0",0,"Pin0:((RES==;FRT==;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF1",0,"Pin1:((RES==;FRT<=30,1;SUT==ALL))"
HKR,"Profiles\KSCAMERAPROFILE_VideoRecording,0","MTF2",0,"Pin2:((RES==;FRT==;SUT==ALL))"
Набор фильтров
В предыдущем разделе мы рассмотрели несколько наборов фильтров и объяснили, что представляют некоторые из этих строк схемы. На этом этапе необходимо описать синтаксис схемы набора фильтров для дальнейшего обсуждения.
Каждый набор фильтров состоит из определенного набора определений для разрешения, частоты кадров и подтипа. Эта тройка объявлений в указанном порядке требуется для валидного набора фильтров.
Фильтр типа носителя данных Pin может состоять из нескольких элементов фильтра.
PinMediaTypeFilter : Pin#:[(!)]|(FilterSet0)(FilterSet1)...(FilterSetN)
FilterSet : [!](ResolutionFilter;FrameRateFilter;SubtypeFilter)
Если набор фильтров не соответствует этой схеме, все объявление профиля отклоняется.
Все строки схемы профиля регистронезависимы.
Каждый фильтр должен быть разделен ";" и трио фильтра разрешения, фильтра частоты кадров и фильтра подтипов должны быть привязаны открытой или закрываемой скобкой.
Другой пример набора фильтров:
; Allow only 1080p@60fps for any media subtype.
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))
; Allow either 1080p@60fps or 1080p@120fps for any subtype but nothing else.
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))((RES==1920,1080;FRT==120,1;SUT==ALL))
Как показано во втором примере выше, при использовании нескольких наборов фильтров для одного пина сравнение выполняется с помощью логического ИЛИ этих наборов фильтров. Например, если тип носителя соответствует обоим из двух наборов фильтров, это разрешено.
Примечание. Чтобы упростить чтение объявления, набор фильтров можно описать в нескольких строках. Для этого они должны иметь один и тот же пин-код# для группировки:
; Allow only 1080p@60fps or 1080p@120fps
Pin0:((RES==1920,1080;FRT==60,1;SUT==ALL))
Pin0:((RES==1920,1080;FRT==120,1;SUT==ALL))
Семантически идентичен приведенному выше объявлению. Однако каждая строка должна иметь уникальную запись MTF#.
Disabled Pin
Фильтр разрешения
Как определено в условиях документа, фильтр по разрешению определяет, как осуществлять фильтрацию на основе атрибута MF_MT_FRAME_SIZE IMFMediaType.
Синтаксис фильтра разрешения:
Resolution : RES[==|<=|>=|!=]Width,Height
Атрибут фильтра разрешающей способности
Атрибут фильтра разрешения использует строку RES. Эта строка регистронезависима.
Операторы сравнения фильтров разрешения
Ниже перечислены поддерживаемые операторы:
| Операторы сравнения | Описание |
|---|---|
| == | Разрешает, если разрешение равно объявленному разрешению. Если набор фильтров является набором фильтров исключений, этот тег запретит, если разрешение равно объявленному разрешению. Примечание. Если объявление использует оператор == и значение фильтра пусто (например, RES==;), атрибут MF_MT_FRAME_SIZE игнорируется. |
| <= | Разрешить, если разрешение равно или не превышает заявленное разрешение. Сравнение разрешения выполняется на основе общего количества пикселей (продукт ширины *высота) и на основе пропорции. Если AAR объявлен в ограничениях профиля, общее число пикселей применяется ко всем соотношениям сторон. В противном случае только соответствующие пропорции. Если набор фильтров является набором фильтров исключений, этот тег запретит, если разрешение равно или меньше объявленного разрешения. |
| >= | Разрешить, если разрешение равно или больше объявленного разрешения. Сравнение разрешения выполняется на основе общего количества пикселей (продукт ширины * высота) и на основе пропорции. Если AAR объявлен в ограничениях профиля, общее число пикселей применяется ко всем соотношениям сторон. В противном случае только соответствующие пропорции. Если набор фильтров является набором фильтров исключений, этот тег запретит, если разрешение равно или больше объявленного разрешения. |
| != | Разрешить, если разрешение не равно объявленному разрешению. Если набор фильтров является набором фильтров исключений, этот тег запретит, если разрешение не равно объявленному разрешению. |
Значение фильтра разрешения
Ширина и высота значения фильтра разрешения должны находиться в десятичном формате, разделенном запятыми (",") без пробелов:
; 1080p only.
RES==1920,1080
Следующий пример:
; 1080p and any lower resolution.
RES<=1920,1080
Будет соответствовать только разрешениям 16:9 равным или меньшим 1080p, если тег AAR не указан в ограничении профиля. Однако, если объявлен AAR, он соответствует всем разрешениям, произведение ширины и высоты которых равно или меньше (1920 * 1080 = 2073600).
Рассмотрим пример.
Если AAR не указан, эта запись соответствует 720p, но не 1280x960.
Если AAR установлен, эта запись охватывает 720p, 1280x960 и все более низкие разрешения.
Если AAR не задан для обеспечения выборочного согласования разрешения для обоих соотношений сторон 16:9 и 4:3, можно использовать несколько наборов фильтров.
; This will match any 16:9 resolution of 1080p or lower
; and match any 4:3 resolution of 800x600 or lower.
; Effectively skipping 1280x960.
((RES<=1920,1080;FRT==;SUT==ALL))((RES<=800,600;FRT==;SUT==ALL))
Чтобы соответствовать всем разрешениям, укажите значение равное или большее чем 0,0
; Match all resolutions.
RES>=0,0
Фильтр частоты кадров
Как определено в условиях документа, фильтр кадровой частоты определяет, как осуществлять фильтрацию на основе атрибута MF_MT_FRAME_RATE IMFMediaType.
Синтаксис фильтра частоты кадров:
FrameRate : FRT[==|<=|>=|!=]Num,Denom
Атрибут фильтра частоты кадров
Атрибут фильтра частоты кадров использует строку FRT. Эта строка регистронезависима.
Операторы сравнения фильтров частоты кадров
Это поддерживаемые теги частоты кадров:
| Операторы сравнения | Описание |
|---|---|
| == | Разрешить, если частота кадров равна объявленной частоте кадров. Если набор фильтров является набором фильтров исключений, этот тег запретит, если частота кадров равна объявленной частоте кадров. Примечание. Если объявление использует оператор == и значение фильтра пусто (например, FRT==;), атрибут MF_MT_FRAME_RATE игнорируется. |
| <= | Разрешить, если частота кадров равна или меньше объявленной частоте кадров. Если набор фильтров является набором фильтров исключений, этот тег запретит, если частота кадров равна или меньше объявленной частоте кадров. |
| >= | Разрешить, если частота кадров равна или больше объявленной частоты кадров. Если набор фильтров является набором фильтров исключений, этот тег запретит, если частота кадров равна или больше объявленной частоте кадров. |
| != | Разрешить только в том случае, если частота кадров не равна объявленной частоте кадров. Если набор фильтров является набором фильтров исключений, этот тег запретит, если частота кадров не равна объявленной частоте кадров. |
; Allow 30fps.
FRT==30,1
; Allow 30fps or lower.
FRT<=30,1
; Allow 60fps or higher.
FRT>=60,1
; Match for all frame rate.
FRT>=0,0
FRT==; и FRT>=0,0 имеют тонкие семантические различия.
FRT==; : Ignore all frame rate checks for the Filter Set.
FRT>=0,0 : Match any frame rate.
Разница между FRT==; и FRT>=0,0 заключается в том, что первое имеет одинаковое значение как для набора фильтров включения, так и для набора фильтров исключения. В то время как значение FRT>=0,0 изменится в зависимости от того, является ли он набором фильтров включения или набором фильтров исключений.
Сведения о наборе фильтров исключений см. в разделе "Набор фильтров исключений".
Фильтр подтипов
Фильтр подтипов определяет, как фильтровать на основе атрибута MF_MT_SUBTYPE IMFMediaType.
Синтаксис фильтра подтипа:
Subtype : SUT[==|!=]SubtypeValue
SubtypeValue : <See Below>
Атрибут фильтра подтипов
Атрибут фильтра подтипов использует строку SUT. Эта строка регистронезависима.
Операторы сравнения подтипов фильтров
Поддерживаются следующие операторы сравнения:
| Операторы сравнения | Описание |
|---|---|
| == | Разрешить, если подтип равен объявленному подтипу. Если набор фильтров является набором фильтров исключений, этот тег запретит, если подтип равен объявленному подтипу. Примечание. Если объявление использует оператор == и значение фильтра пусто (например, FRT==;), атрибут MF_MT_SUBTYPE игнорируется. |
| != | Разрешить, если подтип не равен объявленному подтипу. Если набор фильтров является набором фильтров исключений, этот тег запретит, если подтип не равен объявленному подтипу. |
Операторы "Равно или меньше" (<=) и "Равно" или "Больше" (>=) не поддерживаются для фильтра подтипов. Если профиль объявлен, он считается недействительным и отклоняется потоком обработки.
Значение фильтра подтипа
Значение фильтра подтипа может быть шестнадцатеричным представлением значения FourCC, строкой объявления GUID, если используется настраиваемый тип медиаданных (также может быть использован известный GUID подтипа MFVideoFormat) или известный тег подтипа (см. список ниже).
; Match any media type which has NV12 subtype
SUT==0x3231564E
; Same as above…
SUT=={3231564E-0000-0010-8000-00AA00389B71}
; Still the same (and the recommended declaration).
SUT==NV12
; Allow any subtype except for NV12
SUT!=0x3231564E
; Another way to say the same thing
SUT!={3231564E-0000-0010-8000-00AA00389B71}
; Yet another (and recommended).
SUT!=NV12
; Valid syntax. Profile allow/disallow should ignore
; the subtype and only check against resolution and
; frame rate.
SUT==;
Значение 0/GUID_NULL и ALL имеет особое значение.
Это означает "Все четыре значения CC".
; Match all subtypes
SUT==0
; Another way to say the same thing
SUT=={00000000-0000-0000-0000-000000000000}
; Yet another (and recommended).
SUT==ALL
Семантически, SUT== и SUT==0 имеют тонко различающиеся значения.
При использовании в фильтре включения они имеют тот же эффект: разрешить любой подтип. Но при использовании в фильтре исключений SUT==0 означает исключение всех подтипов. Тем не менее, поскольку это имеет тот же эффект, что и пометка всего пин-кода как отключенный (!), нет причины использовать SUT==0 в фильтре исключений.
Известные теги подтипа
| Метки |
|---|
| RGB32 |
| ARGB32 |
| RGB24 |
| L8 |
| L16 |
| D16 |
| AI44 |
| AYUV |
| YUY2 |
| YVYU |
| YVU9 |
| UYVY |
| NV11 |
| NV12 |
| YV12 |
| I420 |
| IYUV |
| Y210 |
| Y216 |
| Y410 |
| Y416 |
| Y41P |
| Y41T |
| Y42T |
| P210 |
| P216 |
| P010 |
| P016 |
| V210 |
| V216 |
| V410 |
| MP43 |
| MP4S |
| M4S2 |
| MP4V |
| WMV1 |
| WMV2 |
| WMV3 |
| WVC1 |
| MSS1 |
| MSS2 |
| MPG1 |
| DVSL |
| DVSD |
| DVHD |
| DV25 |
| DV50 |
| DVH1 |
| DVC |
| H264 |
| H265 |
| MJPG |
| 420O |
| HEVC |
| HEVS |
| VP80 |
| VP90 |
| ORAW |
| H263 |
| VP10 |
| AV01 |
| JPEG |
Набор фильтров исключений
Все примеры набора фильтров до сих пор являются инклюзивными записями фильтра. Семантически они означают: "если тип носителя соответствует критериям, разрешить его использование клиентом".
Не обсуждается эквивалент "если медиа тип соответствует критериям, запретить этот медиа тип для доступа клиенту".
Для этого нам нужен набор фильтров исключений.
Если набору фильтров предшествует "!":
; Allow everything except 1080p@60fps of any subtype.
Pin0:(!(RES==1920,1080;FRT==60,1;SUT==))
Это набор фильтров исключений. Набор фильтров исключений, если тип носителя совпадает, будет исключен из списка доступных типов носителей.
Объявление нескольких наборов фильтров приведет к тому, что проверка ограничений для каждого набора фильтров будет выполняться с использованием логической операции ИЛИ.
; Allow everything except 1080p@60fps or 1080p@120fps
Pin0:(!(RES==1920,1080;FRT==60,1;SUT==))(!(RES==1920,1080;FRT==120,1;SUT==))
Набор фильтров исключения и включения
Как показано ниже, набор фильтров может быть набором фильтров включения или набором фильтров исключений. Допускается сочетание различных наборов фильтров, но в зависимости от типа добавленного набора фильтров значение фильтра пин-кода может измениться:
Если объявлены только записи фильтра включения для фильтра типа носителя, любой тип носителя, который не соответствует ни одной из записей фильтра, будет исключен из доступных типов носителей.
Если для фильтра типов носителей пин-кода объявляются только записи фильтра исключения, любой тип носителя, который не соответствует одной из записей фильтра исключения, будет выбран из числа доступных типов носителей.
Если для фильтра типов носителей пин-кода объявлены записи включения и фильтра исключений, любой тип носителя, соответствующий набору фильтров включения, включен, если он также не соответствует набору фильтров исключений. Набор фильтров исключений заменяет набор фильтров включения.
Чтобы проиллюстрировать этот пример, предположим, что для Pin0 доступны следующие типы носителей:
1920x1080@60fps, NV12
1920x1080@30fps, NV12
1280x720@60fps, NV12
1280x720@30fps, NV12
640x360@60fps, NV12
640x360@30fps, NV12
Если мы определяем только набор фильтров включения:
; Allow all media types 720p and lower resolution whose frame
; rate is 30fps or lower. for example, no 60fps is allowed and no
; 1080p is allowed.
Pin0:((RES<=1280,720;FRT<=30,1;SUT==ALL))
Если мы объявляем только набор фильтров исключений:
; Disallow 1080p resolutions or higher or any media types with
; 60fps or higher. Ignore Subtypes.
Pin0:(!(RES>=1920,1080;FRT>=60,1;SUT==))
Если мы объявляем набор фильтров включения и исключения:
; Allow all media types except for 640x360@60fps NV12.
Pin0:((RES<=1920,1080;FRT<=60,1;SUT==ALL))
Pin0:(!(RES==640,360;FRT==60,1;SUT==NV12))
Примечание. Из-за правила #2 в инструкции обработки фильтра окончательный пример "Разрешить все типы носителей, кроме 640x360@60fps NV12", можно использовать для нашего примера Pin0:
; Allow all media types except for 640x360@60fps NV12.
Pin0:(!(RES==640,360;FRT==60,1;SUT==NV12))
Так как существует только один набор фильтров исключений, все типы носителей разрешены за исключением типов носителей, соответствующих набору фильтров исключений.
Чтобы проиллюстрировать записи фильтра включения и исключения, рассмотрим несколько примеров:
; Allow any media type that is 30fps.
Pin0:((RES==;FRT==30,1;SUT==ALL))
; Allow any media type that is NV12.
Pin0:((RES==;FRT==;SUT==0x3132564E))
; Allow any media type, except for 4K@60fps of any subtype.
Pin0:(!(RES==3840,2160;FRT==60,1;SUT==))
; Allow any media type less than equal to 4K resolution,
; except for YUY2 subtypes.
Pin0:((RES<=3840,2160;FRT>=0,0;SUT==ALL))
Pin0:(!(RES==;FRT==;SUT==YUY2))
; Allow any media type equal or less than 4K
; and equal or less than 60fps
Pin0:((RES<=3840,2160;FRT<=60,1;SUT==ALL))
; Allow any NV12 and YUY2 media types
Pin0:((RES==;FRT>=0,0;SUT==NV12))((RES==;FRT>=0,0;SUT==YUY2))
; Allow any except for MJPG and H264
Pin0:((RES==;FRT>=0,0;SUT!=MJPG))((RES==;FRT>=0,0;SUT!=H264))
; Allow any but exclude only 4K@60fps NV12 & 3840x2880@60fps NV12
Pin0:(!(RES==3840,2160;FRT==60,1;SUT==NV12))(!(RES==3840,2880;FRT==60,1;SUT==NV12))