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


Закрепление видеопорта

[Функция, связанная с этой страницей, 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 на фильтре Переложителя миксера и подключите фильтр смешателя наложения к отрисовщику видео.
  • VMR-7. Подключите пин-код VP к фильтру диспетчера видеопортов и подключите диспетчер портов видео к VMR-7.
  • VMR-9: нельзя использовать VMR-9, если устройство имеет закрепление VP, так как Direct3D 9 не поддерживает видеопорты. Используйте средство отрисовки видео или VMR-7.

Для сценариев видеопорта рекомендуется использовать средство переложения и отрисовщик видео в диспетчере портов видео и VMR-7, так как не все драйверы поддерживают диспетчер видеопортов. Как правило, наложение Mixer является наиболее надежным вариантом для видеопортов.

Метод ICaptureGraphBuilder2::RenderStream автоматически вставляет наложенный миксер при наличии пин-кода VP. Если вы создаете граф без использования этого метода, проверьте наличие закрепления видеопорта в фильтре записи, а если он присутствует, подключите его к фильтру Overlay Mixer, как показано на следующей схеме.

подключение пин-кода видеопорта к фильтру смесителя наложения.

Для поиска пин-кода VP в фильтре записи можно использовать метод ICaptureGraphBuilder2::FindPin.

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.
);

После добавления Наложения Mixer в граф вызовите 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. Дополнительные сведения см. в разделе Просмотр закрытых подписей.

разделы расширенного отслеживания

Использование наложенного миксера в записи видео