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


Метод IMediaControl::GetState (control.h)

[Функция, связанная с этой страницей, DirectShow — это устаревшая функция. Он был заменен MediaPlayer, МВФMediaEngine и аудио/видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, МВФMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Метод GetState извлекает состояние графа фильтра— приостановлено, запущено или остановлено.

Переходы состояния не обязательно синхронны. Поэтому при вызове этого метода граф фильтров может переходить к новому состоянию. В этом случае метод блокируется до завершения перехода или до истечения указанного времени ожидания.

Синтаксис

HRESULT GetState(
  [in]  LONG          msTimeout,
  [out] OAFilterState *pfs
);

Параметры

[in] msTimeout

Длительность времени ожидания в миллисекундах или INFINITE для указания бесконечного времени ожидания.

[out] pfs

Получает элемент перечисления FILTER_STATE .

Возвращаемое значение

Возвращает значение HRESULT . Возможные значения включают следующие значения.

Код возврата Description
S_OK
Успех.
VFW_S_STATE_INTERMEDIATE
Граф фильтра по-прежнему переходит к указанному состоянию.
VFW_S_CANT_CUE
Диаграмма фильтров приостановлена, но не может быть вызвана данными.
E_FAIL
Неудача.

Замечания

Приложения могут использовать этот метод, чтобы определить, запущено ли воспроизведение после вызова IMediaControl::Run. Как правило, приложения должны иметь собственный механизм отслеживания состояния, в котором они помещают граф фильтра. Приложения обычно используют текущее состояние, чтобы определить, какие элементы управления пользовательским интерфейсом включены или отключены. Например, после перехода графа в состояние выполнения приложение может отключить кнопку "Воспроизвести" и включить кнопку "Остановить" и "Приостановить".

Если граф фильтров находится в переходе к новому состоянию, возвращенное состояние — это новое состояние, а не предыдущее.

Этот метод возвращает ошибку, если в другом потоке есть вызов, чтобы изменить состояние, пока этот метод заблокирован.

Избегайте указания времени ожидания INFINITE, так как потоки не могут обрабатывать сообщения во время ожидания GetState. При вызове GetState из потока, обрабатывающего сообщения Windows, укажите небольшое время ожидания звонка, чтобы оставаться адаптивным к входным данным пользователя. Это особенно важно, если источник потоковой передачи по сети или из Интернета, так как переходы состояния в этих средах могут занять значительно больше времени.

Перечисление FILTER_STATE . Вы можете привести переменную следующим образом:


FILTER_STATE fs;
hr = pControl->GetState(msTimeOut, (OAFilterState*)&fs);

Дополнительные сведения о состояниях графа фильтров см. в разделе "Состояния фильтра".

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Windows
Header control.h (include Dshow.h)
Library Strmiids.lib

См. также

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

Интерфейс IMediaControl