Метод IMiniportWavePciStream::GetPosition (portcls.h)
Метод GetPosition
получает текущее положение потока.
Синтаксис
NTSTATUS GetPosition(
[out] PULONGLONG Position
);
Параметры
[out] Position
Указатель вывода для значения позиции. Этот параметр указывает на выделенную вызывающим переменную ULONGLONG, в которую метод записывает текущее положение байта потока.
Возвращаемое значение
GetPosition
возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае метод возвращает соответствующий код ошибки.
Замечания
Позиция, указанная методом GetPosition
, выражается как смещение байтов с начала потока. Он представляет лучшую оценку положения байтов данных в DAC или ADC для минипорта. Объект минипорта необходим для поддержания положения потока на основе сопоставлений, которые он получает, независимо от того, освобождаются ли сопоставления или отменяются.
Позиция равна нулю сразу после инициализации потока. Переход к состоянию KSSTATE_STOP (см. KSSTATE) сбрасывает позицию до нуля. Когда поток останавливается переходом от KSSTATE_RUN к KSSTATE_PAUSE или KSSTATE_ACQUIRE, позиция зависает. Он отменяет при переходе потока с KSSTATE_PAUSE или KSSTATE_ACQUIRE обратно в KSSTATE_RUN.
Позиция, сообщаемая GetPosition
, не является смещением в одном физическом буфере, выделенном драйвером или клиентом. Вместо этого смещение является относительным потоком и может рассматриваться как смещение в идеализованный буфер, содержащий весь поток и смежный с начала до конца. Любые внутренние смещения, указывающие на фактические физические буферы, содержащие данные, должны храниться отдельно.
Обратите внимание, что значение смещения, полученное вызовом GetPosition
, является одним из следующих:
-
Для потока отрисовки метод
GetPosition
извлекает позицию воспроизведения , которая является смещением байтов образца, который в настоящее время воспроизводится через DAC и передается через разъем динамика. -
Для потока записи метод
GetPosition
извлекает позицию записи, которая является смещением байтов последнего примера, полученного через разъем микрофона и захваченный ADC.
Некоторые звуковые оборудование содержит регистр позиции для отслеживания смещения байтов примера в настоящее время в каждом DAC или ADC, в этом случае метод GetPosition
просто извлекает содержимое регистра позиции для соответствующего потока. Другое звуковое оборудование может предоставить драйверу только указатели DMA в звуковые буферы, в этом случае метод GetPosition
должен обеспечить оптимальную оценку смещения байтов в DAC или ADC на основе текущей позиции DMA и задержки буферизации на устройстве.
Звуковое оборудование, которое внутренне буферизирует часть воспроизведения или потока записи, может сделать точное чтение положения более сложным для получения. В этом случае драйвер должен оценить текущее положение максимально точно. Например, если звуковое устройство предварительно получает поток воспроизведения во внутренний буфер, драйвер может принять как размер буфера, так и сведения о времени, чтобы правильно оценить положение воспроизведения.
Драйвер портов WavePci реализует обработчик свойств для KSPROPERTY_AUDIO_POSITION. Этот обработчик свойств вызывает метод GetPosition
для получения текущей позиции воспроизведения или записи от минипорт-драйвера. Дополнительные сведения см. в свойстве позиции звука.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | portcls.h (include Portcls.h) |
IRQL | PASSIVE_LEVEL |