Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей 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 |