Метод ICaptureGraphBuilder2::ControlStream (strmif.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Метод ControlStream
задает время запуска и остановки для одного или нескольких потоков захваченных данных.
Синтаксис
HRESULT ControlStream(
[in] const GUID *pCategory,
[in] const GUID *pType,
[in] IBaseFilter *pFilter,
[in] REFERENCE_TIME *pstart,
[in] REFERENCE_TIME *pstop,
[in] WORD wStartCookie,
[in] WORD wStopCookie
);
Параметры
[in] pCategory
Указатель на GUID, указывающий одну из категорий контактов, перечисленных в разделе Набор свойств закрепления. Значение этого параметра не может иметь значение NULL.
[in] pType
Указатель на GUID основного типа, указывающий тип носителя или ЗНАЧЕНИЕ NULL. Если этот параметр имеет значение NULL, присвойте параметру pFilter значение NULL . В противном случае вы можете управлять неправильным закреплением и получать непредсказуемые результаты.
[in] pFilter
Указатель на интерфейс IBaseFilter , указывающий, каким фильтром следует управлять. Чтобы управлять всеми фильтрами записи в графе, задайте для этого параметра значение NULL.
[in] pstart
Указатель на переменную, содержащую время начала. Если значение равно MAXLONGLONG (0x7FFFFFFFFFFFFFFF), метод отменяет предыдущий запрос на запуск. Если значение равно NULL, закрепление начинается сразу при выполнении графа.
[in] pstop
Указатель на переменную, содержащую время остановки. Если значение равно MAXLONGLONG, метод отменяет любой предыдущий запрос на остановку. Если значение равно NULL, закрепление немедленно останавливается.
[in] wStartCookie
Значение, отправляемое в качестве второго параметра уведомления о событии EC_STREAM_CONTROL_STARTED . Дополнительные сведения см. в разделе "Примечания".
[in] wStopCookie
Значение, отправляемое в качестве второго параметра уведомления о событии EC_STREAM_CONTROL_STOPPED . Дополнительные сведения см. в разделе "Примечания".
Возвращаемое значение
Возвращает значение HRESULT . Ниже приведены возможные значения.
Код возврата | Описание |
---|---|
|
По крайней мере один подчиненный отрисовщик не будет отправлять уведомление о остановке. |
|
Успешно. |
|
Не удалось найти соответствующий контакт, или закрепление не поддерживает управление потоком. |
|
Аргумент указателя NULL. |
Комментарии
Этот метод находит выходные контакты в фильтрах отслеживания, используя условия поиска, указанные в вызове метода. Затем он вызывает методы IAMStreamControl для этих контактов. Этот метод позволяет приложению управлять потоками без необходимости перечисления фильтров и закреплений в графе.
Используйте этот метод для точного захвата кадра или для индивидуального управления захватом и предварительным просмотром. Например, вы можете прекратить запись на диск, но оставить предварительный просмотр видео запущенным.
Первые три параметра указывают, какие контакты следует контролировать. Граф захвата может иметь несколько фильтров захвата. Например, он может иметь фильтры для данных видео, звука и скрытых субтитров. Кроме того, фильтр записи может иметь несколько выходных контактов. Некоторые фильтры захвата имеют отдельные контакты для предварительного просмотра и захвата или отдельные контакты для данных только для видео и данных с чередованием аудио- и видео. Например, чтобы управлять предварительным просмотром видео, укажите PIN_CATEGORY_PREVIEW для параметра pCategory и MEDIATYPE_Video для pType.
Если категория контактов PIN_CATEGORY_PREVIEW, вы не можете задать определенное время начала и остановки, так как образцы, предоставляемые с помощью предварительного просмотра, не имеют меток времени (см. раздел Метки времени). Вместо этого используйте значения NULL и MAXLONGLONG , чтобы запустить и остановить закрепление в нужное время.
Кроме того, этот метод не поддерживается для предварительной версии, если устройство использует пин-код видеопорта, так как в этом случае устройство доставляет предварительные образцы непосредственно через оборудование.
Когда этот метод находит соответствующий контакт, он выполняет поиск в нижнем потоке другого фильтра, который поддерживает IAMStreamControl (обычно мультиплексор). Если он находит его, он также задает время запуска и остановки для этого фильтра. При этом создаются две пары уведомлений об остановке: одна для фильтра отслеживания, а другая — для нижестоящего фильтра. Только уведомление о остановке из подчиненного фильтра использует параметр wStopCookie . Ожидание этого события гарантирует, что подчиненный фильтр получит последний пример.
Если ни нисходящий фильтр не поддерживает IAMStreamControl, метод возвращает S_FALSE. В этом случае вы можете получить уведомление об остановке перед подготовкой к просмотру последнего примера.
MAXLONGLONG — это максимально возможное значение REFERENCE_TIME . В библиотеке базовых классов DirectShow она также определена как константная MAX_TIME.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | strmif.h (включая Dshow.h) |
Библиотека | Strmiids.lib |