Метод 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 извлекает положение воспроизведения, которое является смещением байтов образца, который в настоящее время воспроизводится через DAC и передается через джек динамик.
  • Для потока записи метод GetPosition извлекает позицию записи, которая является смещением байтов последнего примера, который будет получен через разъем микрофона и захвачен ADC.
Это не смещение примера, который модуль DMA в звуковом устройстве в настоящее время считывает или записывает в буфер звука.

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка portcls.h (include Portcls.h)
IRQL <=DISPATCH_LEVEL

См. также

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE