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.
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 |