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


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

Код возврата Описание
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 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header control.h (включая Dshow.h)
Библиотека Strmiids.lib

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

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

Интерфейс IMediaControl