Реализация и поддержка кодировщика
В Windows XP с пакетом обновления 1 (SP1) корпорация Майкрософт определила три набора свойств потоковой передачи ядра и одно перечисление в ksmedia.h для поддержки устройств кодировщика только для видео. Каждый набор свойств содержит одно свойство. Иными словами, каждое свойство получает собственный набор свойств. Если драйвер выполняет вызовы get-property или Set-property, укажите GUID набора свойств (как определено в ksmedia.h) в элементе Set структуры KSPROPERTY и нуль в элементе Id при настройке вызова:
Property Set | Описание |
---|---|
ENCAPIPARAM_BITRATE | Реализуйте этот набор свойств, чтобы указать скорость кодирования, поддерживаемую устройством кодировщика. Дополнительные сведения см. в разделе Примеры кода кодировщика . |
ENCAPIPARAM_BITRATE_MODE | Реализуйте этот набор свойств, чтобы указать режимы кодирования, поддерживаемые устройством. Этот набор свойств использует перечисление VIDEOENCODER_BITRATE_MODE для указания поддерживаемых режимов. Дополнительные сведения см. в разделе Примеры кода кодировщика . |
ENCAPIPARAM_PEAK_BITRATE | Реализуйте этот набор свойств, чтобы указать максимальную скорость кодирования устройства. |
Клиенты получают доступ к этим свойствам, наследуя COM-интерфейс IVideoEncoder от COM-интерфейса IEncoderAPI (описано в документации по пакету средств разработки программного обеспечения (SDK) для Windows).
Мини-driver должен указывать значения по умолчанию для каждого свойства ENCAPIPARAM_Xxx . В разделе Примеры кода кодировщика показано, как указать значения свойств по умолчанию. Во время разработки и отладки фильтра кодировщика текущая страница свойств может быть активирована из мини-драйвера, поддерживающего набор свойств ENCAPIPARAM_BITRATE.
В DirectX 9.0 в ksmedia.h были определены шесть дополнительных наборов свойств и один набор событий, чтобы обеспечить лучшую поддержку более широкого спектра кодировщиков, включая кодировщики только для аудио. Как и в случае со свойствами ENCAPIPARAM_Xxx , каждое свойство получает собственный набор свойств:
Property Set | Описание |
---|---|
CODECAPI_VIDEO_ENCODER | Если устройство поддерживает кодирование видеопотоков (включая вспомогательный звук, например телевизионный звук), реализуйте поддержку этого набора свойств. |
CODECAPI_AUDIO_ENCODER | Если устройство является кодировщиком только звука, реализуйте поддержку этого набора свойств вместо CODECAPI_VIDEO_ENCODER. |
CODECAPI_SETALLDEFAULTS | Реализуйте этот набор свойств, чтобы сбросить все внутренние параметры устройства кодировщика, такие как скорость кодирования и режим кодирования, до значений по умолчанию. |
CODECAPI_ALLSETTINGS | Реализуйте этот набор свойств для передачи текущих параметров устройства кодировщика. Этот набор свойств используется для обмена данными с клиентами и с клиентами. |
CODECAPI_SUPPORTSEVENTS | Если устройство поддерживает события из пользовательского режима( например, для изменения режима кодирования, скорости или других параметров), реализуйте этот набор свойств. Если вы реализуете этот набор свойств, необходимо также реализовать поддержку события CODECAPI_CHANGELISTS. |
CODECAPI_CURRENTCHANGELIST | Реализуйте этот набор свойств, чтобы определить, какие параметры кодировщика были изменены в предыдущем вызове, чтобы задать одно или несколько свойств кодировщика. |
Набор событий | Описание |
---|---|
Если устройство поддерживает реагирование на события пользовательского режима с помощью набора свойств CODECAPI_SUPPORTSEVENTS, реализуйте этот набор событий, чтобы вернуть список параметров кодировщика, которые были изменены в результате предыдущего вызова свойства Set-property клиента CODECAPI_SETALLDEFAULTS или CODECAPI_ALLSETTINGS. |
Клиенты получают доступ к этим свойствам через COM-интерфейс ICodecAPI (описан в документации по Windows SDK). Дополнительные сведения о COM-интерфейсах, в том числе о том, как указать, какой интерфейс должен предоставлять KsProxy, см. в разделе Установка и регистрация кодировщика .
Мини-driver должен реализовывать поддержку базовых запросов get-property. В разделе Примеры кода кодировщика показано, как поддерживать запросы get-property.
При разработке фильтра кодировщика переместите функции кодирования в отдельный фильтр из фильтра захвата видео. Определите собственные частные среды, чтобы конструкторы графов могли правильно подключать кодировщик и фильтры захвата. Если оборудование может управлять некодированным содержимым в шине, вы также можете предоставлять общедоступные носители. Если вы реализуете как общедоступные, так и частные среды, сначала перечислите частные носители, так как это сокращает время построения графа; , чтобы найти правильный фильтр при построении графа фильтра.
Дополнительные сведения об использовании сред и нескольких экземпляров фильтра (в отдельных диаграммах фильтров) см. в разделе Средние и категории.