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