Метод IGraphConfig::Reconnect (strmif.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Метод Reconnect
выполняет динамическое повторное соединение между двумя контактами.
Синтаксис
HRESULT Reconnect(
[in] IPin *pOutputPin,
[in] IPin *pInputPin,
[in] const AM_MEDIA_TYPE *pmtFirstConnection,
[in] IBaseFilter *pUsingFilter,
[in] HANDLE hAbortEvent,
[in] DWORD dwFlags
);
Параметры
[in] pOutputPin
Указатель на интерфейс IPin выходного контакта. Может иметь значение NULL, в этом случае pInputPin не должно иметь значение NULL.
[in] pInputPin
Указатель интерфейса IPin на входной контакт. Может иметь значение NULL, в этом случае pOutputPin не должен иметь значение NULL.
[in] pmtFirstConnection
Указатель на структуру AM_MEDIA_TYPE , указывающую тип носителя для первого соединения контактов, выполненного во время повторного подключения. Если этот параметр имеет значение NULL, первое соединение может иметь любой тип носителя.
[in] pUsingFilter
Указатель на необязательный фильтр, используемый при повторном подключении. Фильтр должен уже находиться в графе. Может иметь значение NULL.
[in] hAbortEvent
Дескриптор события. Если вызывающий объект является фильтром, вызывающим в одном из потоков обработки данных, этот параметр должен быть дескриптором события, которое будет показано при переводе фильтра в остановленное состояние. В противном случае этот параметр может иметь значение NULL. Дополнительные сведения см. в подразделе "Примечания".
[in] dwFlags
Сочетание флагов из перечисления AM_GRAPH_CONFIG_RECONNECT_FLAGS , указывающее способ повторного подключения.
Возвращаемое значение
В случае успешного выполнения возвращает S_OK. В противном случае возвращает код ошибки, который может быть одним из следующих значений или другими значениями, не указанными в списке.
Код возврата | Описание |
---|---|
|
Недопустимый аргумент. (Например, pInputPin и pOutputPin имеют значение NULL.) |
|
Входной контакт не поддерживает IPinConnection. |
|
Не удалось подключить фильтр. |
|
Состояние фильтра изменилось. Не удается завершить операцию. |
Комментарии
Если указать только один контакт, метод выполнит поиск другого контакта. Однако по умолчанию поиск завершается ошибкой, если достигает фильтра, добавленного в граф с помощью метода IFilterGraph::AddFilter . Чтобы переопределить это поведение, вызовите IGraphConfig::SetFilterFlags и установите флаг AM_FILTER_FLAGS_REMOVABLE для фильтра.
Процесс повторного подключения состоит из нескольких этапов, большинство из них обрабатываются в этом методе:
- Во-первых, перед вызовом метода обязательно заблокируйте поток данных по перенастроенному пути. Для этого приложения должны вызывать метод IPinFlowControl::Block . Если вызывающий объект является фильтром, а не приложением, возможно, фильтр может управлять потоком данных внутри системы.
- Указанные выходные и входные контакты определяют начальную и конечную точки повторного подключения. Входной контакт должен поддерживать интерфейс IPinConnection . Если оставить один из этих контактов не указанным (передав параметр NULL ), метод выполняет поиск в графе фильтра, чтобы найти потенциальный контакт для повторного подключения. (Чтобы найти контакт ввода, он выполняет поиск нижестоящего из выходного контакта; чтобы найти выходной контакт, он выполняет поиск вышестоящий из входного контакта.)
- Метод отправляет все ожидающие данные через граф фильтра (через внутренний вызов IGraphConfig::P ushThroughData).
- Если вы указали фильтр для вставки в граф, метод подключает начальный выходной контакт к входному контакту фильтра и подключает выходной контакт фильтра к окончательному входному контакту. Если фильтр не указан, метод просто подключает выходной контакт к контакту ввода. В любом случае метод вставляет все фильтры преобразования, необходимые для завершения соединений. (Однако это поведение можно переопределить, установив соответствующий флаг. Дополнительные сведения см. в описании параметра dwFlags .)
- Наконец, метод переводит новые фильтры в состояние выполнения. Вызывающий объект может перезапустить поток данных. Приложения могут сделать это, вызывая IPinFlowControl::Block без флагов.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | strmif.h (включая Dshow.h) |
Библиотека | Strmiids.lib |