IMiniportWavePciStream::GetPosition-Methode (portcls.h)
Die GetPosition
-Methode ruft die aktuelle Position des Datenstroms ab.
Syntax
NTSTATUS GetPosition(
[out] PULONGLONG Position
);
Parameter
[out] Position
Ausgabezeiger für den Positionswert. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene ULONGLONG-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
Die von der GetPosition
-Methode angegebene Position wird als Byteoffset vom Anfang des Datenstroms ausgedrückt. Er stellt die beste Schätzung der Byteposition der Daten dar, die sich derzeit in der DAC oder ADC befinden, durch den Miniporttreiber. Das Miniportobjekt ist erforderlich, um die Streamposition basierend auf den abgerufenen Zuordnungen beizubehalten, unabhängig davon, ob Zuordnungen freigegeben oder widerrufen werden.
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.
Die von gemeldete GetPosition
Position ist kein Offset in einen physischen Puffer, den Ihr Treiber oder ein Client zugeordnet hat. Stattdessen ist der Offset streamrelative und kann als Offset in einen idealisierten Puffer betrachtet werden, der den gesamten Datenstrom enthält und von Anfang bis Ende zusammenhängend ist. Alle internen Offsets, die auf die tatsächlichen physischen Puffer verweisen, die die Daten enthalten, müssen separat verwaltet werden.
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 WavePci-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 | PASSIVE_LEVEL |