Метод IMediaSeeking::SetPositions (strmif.h)
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Метод SetPositions
задает текущую и стоп-позицию.
Синтаксис
HRESULT SetPositions(
[in, out] LONGLONG *pCurrent,
[in] DWORD dwCurrentFlags,
[in, out] LONGLONG *pStop,
[in] DWORD dwStopFlags
);
Параметры
[in, out] pCurrent
[in,out] Указатель на переменную, указывающую текущую позицию в единицах формата текущего времени.
[in] dwCurrentFlags
Побитовое сочетание флагов. См. заметки.
[in, out] pStop
[in,out] Указатель на переменную, указывающую время остановки в единицах текущего формата времени.
[in] dwStopFlags
Побитовое сочетание флагов. См. заметки.
Возвращаемое значение
Возвращает значение HRESULT . Ниже приведены возможные значения.
Код возврата | Описание |
---|---|
|
Положение не изменяется. (Оба флага не указывают на поиск.) |
|
Успешно. |
|
Недопустимый аргумент. |
|
Метод не поддерживается. |
|
Аргумент указателя NULL. |
Комментарии
Параметры dwCurrentFlags и dwStopFlags определяют тип поиска. Определены следующие флаги.
Флаги позиционирования | Описание |
---|---|
AM_SEEKING_NoPositioning | Положение не изменяется. (Параметр time может иметь значение NULL.) |
AM_SEEKING_AbsolutePositioning | Указанная позиция является абсолютной. |
AM_SEEKING_RelativePositioning | Указанная позиция относительно предыдущего значения. |
AM_SEEKING_IncrementalPositioning | Позиция остановки (pStop) относительно текущей позиции (pCurrent). |
Флаги модификаторов | Описание |
---|---|
AM_SEEKING_SeekToKeyFrame | Перейдите к ближайшему ключевому кадру. Это может быть быстрее, но менее точно. Ни один из фильтров, поставляемых с DirectShow, не поддерживает этот флаг. Декодеры — это наиболее вероятный тип фильтра для его поддержки. |
AM_SEEKING_ReturnTime | Возвращает эквивалентные значения ссылочного времени. |
AM_SEEKING_Segment | Используйте поиск сегментов. |
AM_SEEKING_NoFlush | Не сбрасывайте. |
Для каждого параметра используйте один флаг позиционирования. При необходимости включите один или несколько флагов модификаторов.
Если указан флаг AM_SEEKING_ReturnTime, метод преобразует значение позиции в время ссылки и возвращает его в переменной pCurrent или pStop . Этот флаг полезен, если используется другой формат времени, например кадры.
Флаги AM_SEEKING_Segment и AM_SEEKING_NoFlush поддерживают простой цикл:
- Если флаг AM_SEEKING_Segment присутствует, фильтр источника отправляет событие EC_END_OF_SEGMENT при достижении позиции остановки вместо вызова IPin::EndOfStream. Приложение может ожидать этого события, а затем выполнить другую команду seek.
- Если флаг AM_SEEKING_NoFlush присутствует, граф не очищает данные во время поиска. Используйте этот флаг с AM_SEEKING_Segment.
Входящие значения pCurrent и pStop выражаются в формате текущего времени. Формат времени по умолчанию — REFERENCE_TIME единиц (100 наносекунд). Чтобы изменить форматы времени, используйте метод IMediaSeeking::SetTimeFormat . Если флаг AM_SEEKING_ReturnTime присутствует, метод преобразует исходящее значение в REFERENCE_TIME единиц.
Разработчики фильтров
При реализации этого метода можно проверка, запрашивает ли вызывающий объект изменение текущей позиции или позиции остановки, используя значение AM_SEEKING_PositioningBitsMask для маскирования флагов модификаторов. Пример:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask if (dwCurrentPos == AM_SEEKING_AbsolutePositioning) { // Set new position to pCurrent. m_rtStart = *pCurrent; } else if (dwCurrentPos == AM_SEEKING_RelativePositioning) { // Increment current position by pCurrent. m_rtStart += *pCurrent; } |
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | strmif.h (включая Dshow.h) |
Библиотека | Strmiids.lib |