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 zugeordnete Variable, in die die Methode die aktuelle Byteposition des Datenstroms schreibt.

Rückgabewert

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

Hinweise

GetPosition gibt die aktuelle Wiedergabe- oder Aufzeichnungsposition des Streams an. Die Position wird als Byteoffset vom Anfang des DMA-Puffers ausgedrückt und stellt die beste Schätzung der Byteposition der Derzeit in der DAC oder ADC befindlichen Daten durch den Miniporttreiber dar.

Die Position ist gleich null nach der Initialisierung des Datenstroms. Bei einem Übergang zum KSSTATE_STOP Zustand (siehe KSSTATE) wird die Position auf 0 (null) zurückgesetzt. Wenn der Stream durch einen Übergang von KSSTATE_RUN zu KSSTATE_PAUSE oder KSSTATE_ACQUIRE angehalten wird, friert die Position ein. Es wird deaktiviert, wenn der Stream von KSSTATE_PAUSE oder 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 bis zum Anfang des Puffers umbrochen. Daher überschreitet die Position niemals die Puffergröße.

Beachten Sie, dass der durch einen GetPosition Aufruf abgerufene Offsetwert einer der folgenden ist:

  • Für einen Renderdatenstrom ruft die GetPosition -Methode die Wiedergabeposition ab. Dabei handelt es sich um den Byteoffset des Beispiels, das derzeit über die DAC wiedergegeben und über die Lautsprecherbuchse übertragen wird.
  • Für einen Aufzeichnungsdatenstrom ruft die -Methode die GetPosition Datensatzposition ab. Dabei handelt es sich um den Byteoffset des letzten Beispiels, das über die Mikrofonbuchse empfangen und vom ADC erfasst wird.
Es ist nicht der Offset des Beispiels, aus dem die DMA-Engine im Audiogerät derzeit liest oder in den Audiopuffer schreibt.

Einige Audiohardware enthält ein Positionsregister, um den Byteoffset des Beispiels zu verfolgen, das derzeit in jeder DAC oder ADC enthalten ist. In diesem Fall ruft die GetPosition Methode einfach den Inhalt des Positionsregisters für den entsprechenden Stream 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 in der DAC oder ADC basierend auf der aktuellen DMA-Position und der internen Pufferungsverzögerungen für das Gerät bereitstellen.

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

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

Anforderungen

Anforderung Wert
Zielplattform Universell
Header portcls.h (portcls.h einschließen)
IRQL <=DISPATCH_LEVEL

Weitere Informationen

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE