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

La GetPosition méthode obtient la position actuelle du flux.

Syntaxe

NTSTATUS GetPosition(
  [out] PULONGLONG Position
);

Paramètres

[out] Position

Pointeur de sortie pour la valeur de position. Ce paramètre pointe vers une variable ULONGLONG allouée par l’appelant dans laquelle la méthode écrit la position d’octet actuelle du flux.

Valeur retournée

GetPosition retourne STATUS_SUCCESS si l’appel a réussi. Sinon, la méthode retourne un code d’erreur approprié.

Remarques

La position indiquée par la GetPosition méthode est exprimée sous la forme d’un décalage d’octet à partir du début du flux. Il représente la meilleure estimation par le pilote miniport de la position d’octet des données actuellement dans la DAC ou L’ADC. L’objet miniport est nécessaire pour maintenir la position du flux en fonction des mappages qu’il acquiert, que les mappages soient libérés ou révoqués.

La position est égale à zéro immédiatement après l’initialisation du flux. Une transition vers l’état KSSTATE_STOP (voir KSSTATE) réinitialise la position à zéro. Lorsque le flux est arrêté par une transition de KSSTATE_RUN à KSSTATE_PAUSE ou KSSTATE_ACQUIRE, la position se fige. Il se dégele lorsque le flux passe de KSSTATE_PAUSE ou de KSSTATE_ACQUIRE à KSSTATE_RUN.

La position signalée par n’est pas un décalage dans une mémoire tampon physique allouée par GetPosition votre pilote ou un client. Au lieu de cela, le décalage est relatif au flux et peut être considéré comme un décalage dans une mémoire tampon idéalisée qui contient l’ensemble du flux et est contiguë du début à la fin. Tous les décalages internes qui pointent vers les mémoires tampons physiques réelles qui contiennent les données doivent être conservés séparément.

Notez que la valeur de décalage récupérée par un GetPosition appel est l’une des suivantes :

  • Pour un flux de rendu, la GetPosition méthode récupère la position de lecture, qui est le décalage d’octet de l’exemple en cours de lecture via la DAC et transmis via la prise jack de l’orateur.
  • Pour un flux de capture, la GetPosition méthode récupère la position de l’enregistrement, qui est le décalage d’octet du dernier exemple à recevoir via la prise microphone et capturé par l’ADC.
Ce n’est pas le décalage de l’exemple que le moteur DMA dans le périphérique audio lit ou écrit dans la mémoire tampon audio.

Certains matériels audio contiennent un registre de position pour suivre le décalage d’octet de l’exemple actuellement dans chaque DAC ou ADC, auquel cas la GetPosition méthode récupère simplement le contenu du registre de position pour le flux approprié. D’autres matériels audio peuvent uniquement fournir au pilote des pointeurs DMA dans les mémoires tampons audio, auquel cas la GetPosition méthode doit fournir une meilleure estimation du décalage d’octet dans la DAC ou L’ADC en fonction de la position actuelle de la DMA et des retards de mise en mémoire tampon internes à l’appareil.

Le matériel audio qui met en mémoire tampon en interne une partie d’un flux de lecture ou de capture peut rendre une lecture de position précise plus difficile à obtenir. Dans ce cas, le conducteur doit estimer la position actuelle aussi précisément que possible. Par exemple, si un périphérique audio préfète le flux de lecture dans une mémoire tampon interne, le pilote peut avoir besoin de prendre en compte la taille de la mémoire tampon et les informations de minutage afin d’estimer correctement la position de lecture.

Le pilote de port WavePci implémente un gestionnaire de propriétés pour KSPROPERTY_AUDIO_POSITION. Ce gestionnaire de propriétés appelle la GetPosition méthode pour obtenir la position de lecture ou d’enregistrement actuelle à partir du pilote miniport. Pour plus d’informations, consultez Audio Position Property.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête portcls.h (include Portcls.h)
IRQL PASSIVE_LEVEL

Voir aussi

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE