Freigeben über


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 Anruf erfolgreich war. Andernfalls gibt die Methode einen geeigneten Fehlercode zurück.

Bemerkungen

Die durch die methode GetPosition angegebene Position wird als Byteoffset vom Anfang des Datenstroms ausgedrückt. Sie stellt die beste Schätzung der Byteposition der Daten dar, die sich derzeit im DAC oder ADC befinden. Das Miniportobjekt ist erforderlich, um die Datenstromposition basierend auf den von ihr abgerufenen Zuordnungen beizubehalten, unabhängig davon, ob Zuordnungen freigegeben oder widerrufen werden.

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.

Die von GetPosition gemeldete Position ist kein Offset in einem physischen Puffer, den Der Treiber zugewiesen hat oder ein Client zugewiesen wurde. Stattdessen ist der Offset streamrelativ 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 von einem GetPosition Aufruf abgerufene Offsetwert einer der folgenden Werte ist:

  • Bei einem Renderdatenstrom ruft die GetPosition-Methode die Wiedergabepositionab. Dabei handelt es sich um den Byte-Offset des Beispiels, das derzeit über den DAC wiedergegeben und über die Lautsprecherbuchse übertragen wird.
  • Bei einem Aufnahmedatenstrom ruft die GetPosition-Methode die Datensatzpositionab, 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 WavePci-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- PASSIVE_LEVEL

Siehe auch

IMiniportWavePciStream-

KSPROPERTY_AUDIO_POSITION

KSSTATE-