Метод 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.
Некоторые аудиоустройства содержат регистр позиции для отслеживания смещения байтов выборки в настоящее время в каждом DAC или ADC. В этом случае GetPosition
метод просто извлекает содержимое регистра позиции для соответствующего потока. Другое звуковое оборудование может предоставлять драйверу только указатели DMA в звуковые буферы. В этом случае GetPosition
метод должен обеспечить наилучшую оценку смещения байтов в DAC или ADC на основе текущей позиции DMA и внутренних задержек буферизации устройства.
Звуковое оборудование, которое внутренне буферизует часть потока воспроизведения или захвата, может затруднить получение точной позиции чтения. В этом случае драйвер должен максимально точно оценить текущее положение. Например, если звуковое устройство предварительно получает поток воспроизведения во внутренний буфер, драйверу может потребоваться учесть размер буфера и сведения о времени, чтобы правильно оценить позицию воспроизведения.
Драйвер порта WaveCyclic реализует обработчик свойств для KSPROPERTY_AUDIO_POSITION. Этот обработчик свойств вызывает GetPosition
метод , чтобы получить текущую позицию воспроизведения или записи из драйвера мини-порта. Дополнительные сведения см. в разделе Audio Position Property.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | portcls.h (включая Portcls.h) |
IRQL | <=DISPATCH_LEVEL |