Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменён MediaPlayer, IMFMediaEngineи захватом аудио и видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует в новом коде использовать MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, где это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Фильтры поддерживают метод IBaseFilter::EnumPins, который перечисляет штифты, доступные в фильтре. Он возвращает указатель на интерфейс IEnumPins. Метод IEnumPins::Next извлекает указатели интерфейса IPin.
В следующем примере показана функция, которая находит пин-код с заданным направлением (входными или выходными данными) в заданном фильтре. В нем используется перечисление PIN_DIRECTION для указания направления контакта и метод IPin::QueryDirection для поиска направления каждого перечисленного контакта. Если эта функция находит соответствующий пин-код, он возвращает указатель интерфейса IPin с выдающимся числом ссылок. Вызывающий объект отвечает за освобождение интерфейса.
HRESULT GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin)
{
IEnumPins *pEnum = NULL;
IPin *pPin = NULL;
HRESULT hr;
if (ppPin == NULL)
{
return E_POINTER;
}
hr = pFilter->EnumPins(&pEnum);
if (FAILED(hr))
{
return hr;
}
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION PinDirThis;
hr = pPin->QueryDirection(&PinDirThis);
if (FAILED(hr))
{
pPin->Release();
pEnum->Release();
return hr;
}
if (PinDir == PinDirThis)
{
// Found a match. Return the IPin pointer to the caller.
*ppPin = pPin;
pEnum->Release();
return S_OK;
}
// Release the pin for the next time through the loop.
pPin->Release();
}
// No more pins. We did not find a match.
pEnum->Release();
return E_FAIL;
}
Эту функцию можно легко изменить, чтобы вернуть nth pin с указанным направлением или nth unconnected pin. (Чтобы узнать, подключен ли пин-код к другому пин-коду, вызовите метод IPin::ConnectedTo.)
Связанные разделы