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


Метод IMiniportWaveCyclicStream::GetPosition (portcls.h)

Метод GetPosition получает текущую позицию потока.

Синтаксис

NTSTATUS GetPosition(
  [out] PULONG Position
);

Параметры

[out] Position

Указатель вывода для значения позиции. Этот параметр указывает на переменную, выделенную вызывающим объектом, в которую метод записывает текущую позицию байтов потока.

Возвращаемое значение

GetPosition возвращает STATUS_SUCCESS, если вызов был успешным. В противном случае метод возвращает соответствующий код ошибки.

Комментарии

GetPosition сообщает текущее воспроизведение или позицию записи потока. Позиция выражается в виде смещения в байтах от начала буфера DMA и представляет собой наилучшую оценку байтового положения данных, которые в настоящее время находятся в DAC или ADC.

Позиция равна нулю сразу после инициализации потока. При переходе в состояние KSSTATE_STOP (см. KSSTATE) положение сбрасывается до нуля. Когда поток останавливается переходом от KSSTATE_RUN к KSSTATE_PAUSE или KSSTATE_ACQUIRE, позиция зависает. Он размораживать при переходе потока из KSSTATE_PAUSE или KSSTATE_ACQUIRE обратно в KSSTATE_RUN.

GetPosition задает позицию в качестве смещения в циклическом буфере. Когда позиция достигает конца циклического буфера, она переносится в начало буфера. Таким образом, позиция никогда не превышает размер буфера.

Обратите внимание, что значение смещения, полученное вызовом GetPosition , является одним из следующих:

  • Для потока GetPosition отрисовки метод получает позицию воспроизведения, которая представляет собой смещение в байтах образца, который в настоящее время воспроизводится через приложение уровня данных и передается через разъем динамика.
  • Для потока GetPosition захвата метод извлекает позицию записи, которая представляет собой смещение в байтах последнего образца, полученного через разъем микрофона и захватываемого ADC.
Это не смещение образца, которое обработчик DMA в звуковом устройстве в настоящее время считывает или записывает в звуковой буфер.

Некоторые аудиоустройства содержат регистр позиции для отслеживания смещения байтов выборки в настоящее время в каждом DAC или ADC. В этом случае GetPosition метод просто извлекает содержимое регистра позиции для соответствующего потока. Другое звуковое оборудование может предоставлять драйверу только указатели DMA в звуковые буферы. В этом случае GetPosition метод должен обеспечить наилучшую оценку смещения байтов в DAC или ADC на основе текущей позиции DMA и внутренних задержек буферизации устройства.

Звуковое оборудование, которое внутренне буферизует часть потока воспроизведения или захвата, может затруднить получение точной позиции чтения. В этом случае драйвер должен максимально точно оценить текущее положение. Например, если звуковое устройство предварительно получает поток воспроизведения во внутренний буфер, драйверу может потребоваться учесть размер буфера и сведения о времени, чтобы правильно оценить позицию воспроизведения.

Драйвер порта WaveCyclic реализует обработчик свойств для KSPROPERTY_AUDIO_POSITION. Этот обработчик свойств вызывает GetPosition метод , чтобы получить текущую позицию воспроизведения или записи из драйвера мини-порта. Дополнительные сведения см. в разделе Audio Position Property.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть portcls.h (включая Portcls.h)
IRQL <=DISPATCH_LEVEL

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

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE