Метод IMediaControl::GetState (control.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Метод GetState
извлекает состояние графа фильтра : приостановлено, выполняется или остановлено.
Переходы состояния не обязательно являются синхронными. Таким образом, при вызове этого метода граф фильтра может перейти в новое состояние. В этом случае метод блокируется до завершения перехода или до истечения указанного времени ожидания.
Синтаксис
HRESULT GetState(
[in] LONG msTimeout,
[out] OAFilterState *pfs
);
Параметры
[in] msTimeout
Длительность времени ожидания в миллисекундах или INFINITE для указания бесконечного времени ожидания.
[out] pfs
Получает элемент перечисления FILTER_STATE .
Возвращаемое значение
Возвращает значение HRESULT . Ниже приведены возможные значения.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Граф фильтра по-прежнему переходит в указанное состояние. |
|
Диаграмма фильтра приостановлена, но не может содержать данные. |
|
Ошибка. |
Комментарии
Приложения могут использовать этот метод, чтобы определить, запущено ли воспроизведение после вызова метода IMediaControl::Run. Как правило, приложения должны иметь собственный механизм отслеживания состояния, в которое они помещают граф фильтра. Приложения обычно используют текущее состояние, чтобы определить, какие элементы управления пользовательского интерфейса включены или отключены. Например, после перехода графа в запущенное состояние приложение может отключить кнопку "Воспроизвести" и включить кнопки "Остановить" и "Приостановить".
Если граф фильтра находится в переходе в новое состояние, возвращенным состоянием является новое, а не предыдущее состояние.
Этот метод возвращает ошибку при вызове в другом потоке для изменения состояния, пока этот метод заблокирован.
Не указывайте время ожидания INFINITE, так как потоки не могут обрабатывать сообщения во время ожидания в GetState
. При вызове GetState
из потока, обрабатывающего сообщения Windows, укажите небольшое время ожидания вызова, чтобы реагировать на ввод данных пользователем. Это особенно важно, когда источник выполняет потоковую передачу по сети или из Интернета, так как переходы состояния в этих средах могут занять значительно больше времени.
Перечисление FILTER_STATE . Переменную можно привести следующим образом:
FILTER_STATE fs;
hr = pControl->GetState(msTimeOut, (OAFilterState*)&fs);
Дополнительные сведения о состояниях графа фильтра см. в разделе Состояния фильтра.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | control.h (включая Dshow.h) |
Библиотека | Strmiids.lib |