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

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

Синтаксис

NTSTATUS GetPosition(
  [out] PULONGLONG Position
);

Параметры

[out] Position

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

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

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

Комментарии

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

Позиция равна нулю сразу после инициализации потока. При переходе в состояние 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 и внутренних задержек буферизации на устройстве.

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

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

Требования

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

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

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE