Freigeben über


IMiniportWaveCyclicStream::GetPosition-Methode (portcls.h)

Die GetPosition-Methode ruft die aktuelle Position des Datenstroms ab.

Syntax

NTSTATUS GetPosition(
  [out] PULONG Position
);

Parameter

[out] Position

Ausgabezeiger für den Positionswert. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene Variable, in die die Methode die aktuelle Byteposition des Datenstroms schreibt.

Rückgabewert

GetPosition gibt STATUS_SUCCESS zurück, wenn der Anruf erfolgreich war. Andernfalls gibt die Methode einen geeigneten Fehlercode zurück.

Bemerkungen

GetPosition meldet die aktuelle Wiedergabe- oder Datensatzposition des Datenstroms. Die Position wird als Byteoffset vom Anfang des DMA-Puffers ausgedrückt und stellt die beste Schätzung der byteposition der Daten dar, die sich derzeit im DAC oder ADC befinden.

Die Position ist null unmittelbar nach der Initialisierung des Datenstroms. Ein Übergang zum KSSTATE_STOP Zustand (siehe KSSTATE) setzt die Position auf Null zurück. Wenn der Datenstrom durch einen Übergang von KSSTATE_RUN zu KSSTATE_PAUSE oder KSSTATE_ACQUIRE angehalten wird, wird die Position fixiert. Die Fixierung wird deaktiviert, wenn der Datenstrom von KSSTATE_PAUSE oder von KSSTATE_ACQUIRE zurück zu KSSTATE_RUN wechselt.

GetPosition gibt die Position als Offset in den zyklischen Puffer an. Wenn die Position das Ende des zyklischen Puffers erreicht, wird sie an den Anfang des Puffers umgebrochen. Daher überschreitet die Position niemals die Puffergröße.

Beachten Sie, dass der von einem GetPosition Aufruf abgerufene Offsetwert einer der folgenden Werte ist:

  • Bei einem Renderdatenstrom ruft die GetPosition-Methode die Wiedergabeposition ab, bei der es sich um den Byte-Offset des Beispiels handelt, das derzeit über den DAC wiedergegeben und über die Lautsprecherbuchse übertragen wird.
  • Bei einem Aufnahmedatenstrom ruft die GetPosition-Methode die Aufnahmeposition ab, bei der es sich um den Byte-Offset des neuesten Beispiels handelt, das über die Mikrofonbuchse empfangen und vom ADC erfasst wird.
Es handelt sich nicht um den Offset des Beispiels, von dem das DMA-Modul im Audiogerät derzeit auslese oder in den Audiopuffer schreibe.

Einige Audiohardware enthält ein Positionsregister, um den Byte-Offset des Beispiels aktuell in jedem DAC oder ADC nachzuverfolgen, in diesem Fall ruft die GetPosition-Methode einfach den Inhalt des Positionsregisters für den entsprechenden Datenstrom ab. Andere Audiohardware kann den Treiber nur mit DMA-Zeigern in die Audiopuffer bereitstellen. In diesem Fall muss die GetPosition-Methode eine optimale Schätzung des Byteoffsets im DAC oder ADC basierend auf der aktuellen DMA-Position und der Pufferungsverzögerung innerhalb des Geräts bereitstellen.

Audiohardware, die einen Teil eines Wiedergabe- oder Aufnahmedatenstroms intern puffert, kann das Abrufen einer präziseren Positionsanzeige erschweren. In diesem Fall sollte der Fahrer die aktuelle Position so genau wie möglich schätzen. Wenn z. B. ein Audiogerät den Wiedergabedatenstrom in einen internen Puffer vorab einspeckt, muss der Treiber möglicherweise sowohl die Puffergröße als auch die Anzeigedauerinformationen berücksichtigen, um die Wiedergabeposition ordnungsgemäß zu schätzen.

Der WaveCyclic-Porttreiber implementiert einen Eigenschaftshandler für KSPROPERTY_AUDIO_POSITION. Dieser Eigenschaftenhandler ruft die GetPosition-Methode auf, um die aktuelle Wiedergabe- oder Datensatzposition vom Miniporttreiber abzurufen. Weitere Informationen finden Sie unter AudioPosition-Eigenschaft.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- portcls.h (include Portcls.h)
IRQL- <=DISPATCH_LEVEL

Siehe auch

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE-