KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
Die KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION-Eigenschaftsanforderung gibt die aktuelle Schreibposition des WaveRT-Puffers in Bytes an. Der Auslagerungstreiber kann diese Schreibpositionsinformationen verwenden, um zu ermitteln, wie viele gültige Daten im WaveRT-Puffer enthalten sind.
Nutzungszusammenfassungstabelle
Herunterladen | Set | Ziel | Eigenschaftendeskriptortyp | Eigenschaftswerttyp |
---|---|---|---|---|
Nein |
Ja |
Knoten über anheften instance |
KSP_NODE |
ULONG |
Rückgabewert
Die KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION-Eigenschaftsanforderung gibt STATUS_SUCCESS zurück, um anzugeben, dass sie erfolgreich abgeschlossen wurde. Andernfalls gibt die Anforderung einen geeigneten Fehler status Code zurück.
Bemerkungen
Um besser zu verstehen, wie die von dieser Eigenschaftsanforderung bereitgestellten Informationen interpretiert werden, nehmen Sie einen kreisförmigen Puffer von Größe n Bytes an. Die anfängliche Schreibposition, bevor Daten geschrieben werden, ist 0. Daten werden in Blöcken in den Puffer geschrieben, die ein Vielfaches von WAVEFORMATEX.nBlockAlign-Bytes sind.
Der Puffer kann beispielsweise 20 ms an 16-Bit-PCM-Stereodaten enthalten, die bei 48000 Hz abgefragt werden. Basierend auf der Beschreibung für den nBlockAlign-Member der WAVEFORMATEX-Struktur , in diesem Beispiel nBlockAlign = 2 * 16 / 8 = 4 Bytes. Dies bedeutet, dass die Länge des Puffers 48000 * 20 / 1000 = 960 Frames oder 960 * 4 = 3840 Bytes wäre.
Die erste Set-Anforderung gibt die Anzahl der Bytes an, die in den Puffer geschrieben wurden. Und da die "Schreibposition" in Bytes ausgedrückt wird, würde ein Wert von 1920 die Hälfte der Puffergröße angeben, während ein Wert von 3840 die vollständige Puffergröße angibt. Um die Anzahl der neu geschriebenen Bytes für nachfolgende Set-Anforderungen zu bestimmen, zeigt der folgende Pseudocode, wie die Berechnung ausgeführt wird:
if new write position > old write position:
bytes written = new write position – old write position
if new write position < old write position, we’ve wrapped:
bytes written = (new write position + buffer size) – old write position
if new write position = old write position, we’ve had a glitch
log a "duplicate write position" glitch event
Requirements (Anforderungen)
Version |
Windows 8 |
Header |
Ksmedia.h |