Share via


Método IMiniportWavePciStream::GetPosition (portcls.h)

El GetPosition método obtiene la posición actual de la secuencia.

Sintaxis

NTSTATUS GetPosition(
  [out] PULONGLONG Position
);

Parámetros

[out] Position

Puntero de salida para el valor de posición. Este parámetro apunta a una variable ULONGLONG asignada por el autor de la llamada en la que el método escribe la posición de bytes actual de la secuencia.

Valor devuelto

GetPosition devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, el método devuelve un código de error adecuado.

Comentarios

La posición indicada por el GetPosition método se expresa como un desplazamiento de bytes desde el principio de la secuencia. Representa la mejor estimación del controlador de miniporte de la posición de bytes de los datos actualmente en la DAC o ADC. El objeto miniport es necesario para mantener la posición del flujo en función de las asignaciones que adquiere, independientemente de si las asignaciones se liberan o revocan.

La posición es cero inmediatamente después de la inicialización de la secuencia. Una transición al estado KSSTATE_STOP (vea KSSTATE) restablece la posición en cero. Cuando la secuencia se detiene mediante una transición de KSSTATE_RUN a KSSTATE_PAUSE o KSSTATE_ACQUIRE, la posición se bloquea. Se descongela cuando la secuencia pasa de KSSTATE_PAUSE o KSSTATE_ACQUIRE de nuevo a KSSTATE_RUN.

La posición notificada por GetPosition no es un desplazamiento en ningún búfer físico que haya asignado el controlador o que haya asignado un cliente. En su lugar, el desplazamiento es relativo a la secuencia y se puede considerar como un desplazamiento en un búfer idealizado que contiene toda la secuencia y es contiguo de principio a fin. Los desplazamientos internos que apuntan a los búferes físicos reales que contienen los datos deben mantenerse por separado.

Tenga en cuenta que el valor de desplazamiento recuperado por una GetPosition llamada es uno de los siguientes:

  • Para una secuencia de representación, el GetPosition método recupera la posición de reproducción, que es el desplazamiento de bytes de la muestra que se está reproduciendo actualmente a través de la DAC y se transmite a través del conector del altavoz.
  • Para una secuencia de captura, el GetPosition método recupera la posición del registro, que es el desplazamiento de bytes de la muestra más reciente que se va a recibir a través del conector de micrófono y capturado por el ADC.
No es el desplazamiento del ejemplo que el motor DMA del dispositivo de audio está leyendo o escribiendo en el búfer de audio.

Algunos hardware de audio contienen un registro de posición para realizar un seguimiento del desplazamiento de bytes de la muestra actualmente en cada DAC o ADC, en cuyo caso el GetPosition método simplemente recupera el contenido del registro de posición para la secuencia adecuada. Otro hardware de audio solo puede proporcionar el controlador con punteros DMA en los búferes de audio, en cuyo caso el GetPosition método debe proporcionar una mejor estimación del desplazamiento de bytes en la DAC o ADC según la posición actual de DMA y los retrasos de almacenamiento en búfer internos para el dispositivo.

El hardware de audio que almacena internamente en búfer una parte de una secuencia de reproducción o captura podría dificultar la lectura de una posición precisa. En este caso, el controlador debe calcular la posición actual lo más precisa posible. Por ejemplo, si un dispositivo de audio captura previamente la secuencia de reproducción en un búfer interno, es posible que el controlador tenga en cuenta tanto el tamaño del búfer como la información de tiempo para calcular correctamente la posición de reproducción.

El controlador de puerto WavePci implementa un controlador de propiedades para KSPROPERTY_AUDIO_POSITION. Este controlador de propiedades llama al GetPosition método para obtener la posición de reproducción o registro actual del controlador de miniporte. Para obtener más información, vea Propiedad De posición de audio.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado portcls.h (incluya Portcls.h)
IRQL PASSIVE_LEVEL

Consulte también

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE