Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
В этом разделе показаны некоторые вспомогательные функции для подключения фильтров DirectShow.
Чтобы подключить два фильтра, необходимо найти несоединяемый выходной пин-код на вышестоящем фильтре и несоединяемый входной пин-код в нижнем фильтре.
Если у вас уже есть указатели на оба закрепления, вызовите метод IGraphBuilder::Connect для их подключения. Если контакты не могут подключаться напрямую друг к другу, метод IGraphBuilder::Connect может вставить дополнительные фильтры, чтобы завершить подключение. Дополнительные сведения см. в разделе Intelligent Connect.
Если у вас есть указатель на фильтры, но не закрепленные, необходимо использовать метод IBaseFilter::EnumPins для поиска закреплений. (См. перечисление закреплений.) Вспомогательные функции в этом разделе демонстрируют этот метод.
Выходной закрепление для фильтрации
Следующая функция принимает два параметра: указатель на выходной пин-код и указатель на фильтр. Функция подключает выходной пин-код к первому доступному входному закреплению фильтра.
// Connect output pin to filter.
HRESULT ConnectFilters(
IGraphBuilder *pGraph, // Filter Graph Manager.
IPin *pOut, // Output pin on the upstream filter.
IBaseFilter *pDest) // Downstream filter.
{
IPin *pIn = NULL;
// Find an input pin on the downstream filter.
HRESULT hr = FindUnconnectedPin(pDest, PINDIR_INPUT, &pIn);
if (SUCCEEDED(hr))
{
// Try to connect them.
hr = pGraph->Connect(pOut, pIn);
pIn->Release();
}
return hr;
}
Эта функция выполняет следующие действия:
- Вызывает функцию
FindUnconnectedPin, чтобы получить несоединенные входные пин-коды. Эта функция показана в разделе Найти несоединенные закрепление в фильтре. - Вызывает IGraphBuilder::Connect для подключения двух закреплений.
Фильтрация по входным закреплениям
Следующая функция принимает указатель на фильтр и указатель на входной пин-код. Он подключает входной пин-код к первому доступному выходному закреплению фильтра.
// Connect filter to input pin.
HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pSrc, IPin *pIn)
{
IPin *pOut = NULL;
// Find an output pin on the upstream filter.
HRESULT hr = FindUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
if (SUCCEEDED(hr))
{
// Try to connect them.
hr = pGraph->Connect(pOut, pIn);
pOut->Release();
}
return hr;
}
Фильтрация по фильтру
Третья функция принимает указатель на вышестоящий фильтр и указатель на подчиненный фильтр и пытается подключить оба фильтра.
// Connect filter to filter
HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pSrc, IBaseFilter *pDest)
{
IPin *pOut = NULL;
// Find an output pin on the first filter.
HRESULT hr = FindUnconnectedPin(pSrc, PINDIR_OUTPUT, &pOut);
if (SUCCEEDED(hr))
{
hr = ConnectFilters(pGraph, pOut, pDest);
pOut->Release();
}
return hr;
}
Связанные разделы