Метод IMediaSeeking::SetRate (strmif.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Метод SetRate
задает частоту воспроизведения.
Синтаксис
HRESULT SetRate(
[in] double dRate
);
Параметры
[in] dRate
Скорость воспроизведения. Не должно быть равно нулю.
Возвращаемое значение
Возвращает значение HRESULT . Ниже приведены возможные значения.
Код возврата | Описание |
---|---|
|
Успешно. |
|
Указанная ставка была нулевой или отрицательной. (См. раздел «Примечания».) |
|
Не реализован. |
|
Аргумент указателя NULL. |
|
Звуковое устройство или фильтр не поддерживают эту частоту. |
Комментарии
Скорость воспроизведения выражается как отношение к нормальной скорости. Таким образом, 1,0 — это нормальная скорость воспроизведения, 0,5 — половина скорости, а 2,0 — в два раза быстрее. Для аудиопотоков изменение скорости также изменяет шаг.
Отрицательные значения указывают на обратное воспроизведение. Большинство фильтров не поддерживают отрицательное воспроизведение, но вместо этого возвращают код ошибки, если параметр dRate отрицательный.
Когда приложение вызывает этот метод в диспетчере filter Graph Manager, диспетчер фильтров графов выполняет следующие действия:
- Вызывает метод IMediaSeeking::GetCurrentPosition . Этот вызов возвращает текущую позицию, вычисленную диспетчером фильтров графов.
- Останавливает граф фильтра (если граф приостановлен или запущен).
- Вызывает метод IMediaSeeking::SetPositions для фильтров с текущей позицией в качестве времени начала. Это позволяет сбросить время потока до нуля.
SetRate
Вызывает метод в фильтрах с новой скоростью.- Возобновляет работу диаграммы фильтров, если она была приостановлена или запущена.
Фильтры должны реагировать на изменения скорости следующим образом:
Синтаксический анализатор и фильтры источника: Фильтр, который является источником меток времени, отвечает на SetRate
вызов. Обычно это фильтр средства синтаксического анализа, например фильтр разделителя AVI, но это может быть фильтр источника. После любого изменения скорости поиска или изменения скорости фильтр должен вызвать метод IPin::NewSegment с новыми параметрами. После изменения скорости он должен соответствующим образом отрегулировать свои метки времени. Так как изменению скорости предшествует поиск, метки времени перезапускаются с нуля, поэтому фильтр может просто разделить на скорость для вычисления новых меток времени.
Фильтры декодера: Декодеры не должны работать с SetRate
вызовами, кроме как передавать их вышестоящий. Вместо этого они должны отвечать на вызов NewSegment, который вышестоящий синтаксический анализатор выдает. Когда фильтр декодера получает сведения о новом сегменте, он должен хранить значения и передавать вызов NewSegment ниже. Некоторые декодеры должны создавать дополнительные метки времени путем интерполяции входных данных; при этом они должны учитывать изменения ставок.
Модулей: Отрисовщики видео обычно могут игнорировать изменения скорости, так как входящие кадры уже имеют правильную метку времени. Отрисовщики звука должны изменять частоту воспроизведения, так как декодеры звука обычно не изменяют скорость преобразования.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | strmif.h (включая Dshow.h) |
Библиотека | Strmiids.lib |