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


Метод 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 . Ниже приведены возможные значения.

Код возврата Описание
S_FALSE
По крайней мере один подчиненный отрисовщик не будет отправлять уведомление о остановке.
S_OK
Успешно.
E_FAIL
Не удалось найти соответствующий контакт, или закрепление не поддерживает управление потоком.
E_POINTER
Аргумент указателя NULL.

Комментарии

Этот метод находит выходные контакты в фильтрах отслеживания, используя условия поиска, указанные в вызове метода. Затем он вызывает методы IAMStreamControl для этих контактов. Этот метод позволяет приложению управлять потоками без необходимости перечисления фильтров и закреплений в графе.

Используйте этот метод для точного захвата кадра или для индивидуального управления захватом и предварительным просмотром. Например, вы можете прекратить запись на диск, но оставить предварительный просмотр видео запущенным.

Первые три параметра указывают, какие контакты следует контролировать. Граф захвата может иметь несколько фильтров захвата. Например, он может иметь фильтры для данных видео, звука и скрытых субтитров. Кроме того, фильтр записи может иметь несколько выходных контактов. Некоторые фильтры захвата имеют отдельные контакты для предварительного просмотра и захвата или отдельные контакты для данных только для видео и данных с чередованием аудио- и видео. Например, чтобы управлять предварительным просмотром видео, укажите PIN_CATEGORY_PREVIEW для параметра pCategory и MEDIATYPE_Video для pType.

Примечание  

Если категория контактов PIN_CATEGORY_PREVIEW, вы не можете задать определенное время начала и остановки, так как образцы, предоставляемые с помощью предварительного просмотра, не имеют меток времени (см. раздел Метки времени). Вместо этого используйте значения NULL и MAXLONGLONG , чтобы запустить и остановить закрепление в нужное время.

Кроме того, этот метод не поддерживается для предварительной версии, если устройство использует пин-код видеопорта, так как в этом случае устройство доставляет предварительные образцы непосредственно через оборудование.

 
Для управления закреплением этот метод вызывает методы IAMStreamControl::StartAt и IAMStreamControl::StopAt . Каждый пин-код отправляет уведомление о событии EC_STREAM_CONTROL_STARTED при запуске. Второй параметр уведомления о событии — это значение, заданное в wStartCookie. Когда закрепление останавливается, он отправляет уведомление о событии EC_STREAM_CONTROL_STOPPED . Вторым параметром уведомления о событии является значение, заданное в wStopCookie.

Когда этот метод находит соответствующий контакт, он выполняет поиск в нижнем потоке другого фильтра, который поддерживает 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

См. также раздел

Коды ошибок и успешности

Интерфейс ICaptureGraphBuilder2