Контакты видеопорта
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Устройство захвата с аппаратным видеопортом может использовать расширения видеопорта (VPE) в Microsoft® DirectX®. Если это так, фильтр записи будет иметь закрепление видеопорта (VP). Никакие видеоданные не передаются от контакта VP через граф фильтра. Вместо этого видеокадры создаются на оборудовании и отправляются непосредственно в видеопамяти. Пин-код VP позволяет отправлять управляющие сообщения на оборудование.
Важно подключить пин-код VP, даже если приложение выполняет запись файлов только без предварительного просмотра. Если оставить контакт без подключения, граф будет работать неправильно. Это отличается от контактов предварительного просмотра, которые не обязательно должны быть подключены.
Различные отрисовщики видео DirectShow обеспечивают различную поддержку контактов VP:
- Отрисовщик видео. Подключите контакт VP к закреплению 0 в фильтре Overlay Mixer и подключите фильтр Overlay Mixer к отрисовщику видео.
- VMR-7. Подключите контакт VP к фильтру диспетчера видеопортов , а диспетчер видеопортов — к VMR-7.
- VMR-9: вы не можете использовать VMR-9, если устройство имеет контакт VP, так как Direct3D 9 не поддерживает видеопорты. Используйте отрисовщик видео или VMR-7.
Для сценариев видеопорта рекомендуется использовать средство наложения Mixer и отрисовщик видео через диспетчер видеопортов и VMR-7, так как не все драйверы поддерживают диспетчер видеопортов. Как правило, оверлейный миксер является наиболее надежным вариантом для видеопортов.
Метод ICaptureGraphBuilder2::RenderStream автоматически вставляет миксер наложения при наличии контакта VP. При построении графа без использования этого метода следует проверка для закрепления видеопорта на фильтре захвата и, если он присутствует, подключите его к фильтру Overlay Mixer, как показано на следующей схеме.
Вы можете использовать метод ICaptureGraphBuilder2::FindPin для поиска контакта VP в фильтре захвата:
hr = pBuild->FindPin(
pCap, // Pointer to the capture filter.
PINDIR_OUTPUT, // Look for an output pin.
&PIN_CATEGORY_VIDEOPORT, // Look for a video port pin.
NULL, // Any media type.
FALSE, // Pin can be connected.
0, // Retrieve the first matching pin.
&pVPPin // Receives a pointer to the pin.
);
После добавления микшера наложения в граф вызовите Метод FindPin еще раз, чтобы найти контакт 0 в наложенном микшере. Закрепление 0 всегда является первым контактом ввода в фильтре.
pBuild->FindPin(pOvMix, PINDIR_INPUT, NULL, NULL, TRUE, 0, &pOVPin);
Соедините два контакта, вызвав IGraphBuilder::Connect.
pGraph->Connect(pVPPin, pOvPin);
Затем подключите выходной контакт микшера наложения к фильтру отрисовщика видео. Вы можете скрыть видео, вызвав методы IVideoWindow::p ut_AutoShow и IVideoWindow::p ut_Visible в диспетчере фильтров графов.
Для ТВ-тюнеров фильтр захвата также может иметь контакт VBI видеопорта (PIN_CATEGORY_VIDEOPORT_VBI). Если это так, подключите этот контакт к фильтру VBI Surface Allocator . Дополнительные сведения см. в разделе Просмотр скрытых субтитров.
Связанные темы