KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
La demande de propriété KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION spécifie la position d’écriture actuelle de la mémoire tampon WaveRT en octets. Le pilote de déchargement peut utiliser ces informations de position d’écriture pour connaître la quantité de données valides dans la mémoire tampon WaveRT.
Tableau récapitulatif de l’utilisation
Obtenir | Définissez | Cible | Type de descripteur de propriété | Type de valeur de propriété |
---|---|---|---|---|
Non |
Oui |
Nœud via pin instance |
KSP_NODE |
ULONG |
Valeur de retour
La demande de propriété KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION retourne STATUS_SUCCESS pour indiquer qu’elle s’est terminée avec succès. Sinon, la demande retourne une erreur appropriée status code.
Notes
Pour mieux comprendre comment interpréter les informations fournies par cette demande de propriété, supposons une mémoire tampon circulaire de taille n octets. La position d’écriture initiale, avant l’écriture des données, est 0. Les données sont écrites dans la mémoire tampon en blocs qui sont un multiple d’octets WAVEFORMATEX.nBlockAlign .
Par exemple, la mémoire tampon peut contenir 20 ms de données stéréo PCM 16 bits, échantillonnées à 48 000 Hz. Par conséquent, en fonction de la description du membre nBlockAlign de la structure WAVEFORMATEX , dans cet exemple nBlockAlign = 2 * 16 / 8 = 4 octets. Cela signifie que la longueur de la mémoire tampon est de 48000 * 20 / 1000 = 960 images, ou 960 * 4 = 3840 octets.
La première requête Set spécifie le nombre d’octets qui ont été écrits dans la mémoire tampon. Et comme la « position d’écriture » est exprimée en octets, une valeur de 1920 spécifierait la moitié de la taille de la mémoire tampon, alors qu’une valeur de 3840 indiquerait la taille complète de la mémoire tampon. Pour déterminer le nombre de nouveaux octets écrits, pour effectuer les requêtes set suivantes, le pseudo-code suivant montre comment le calcul est effectué :
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
Spécifications
Version |
Windows 8 |
En-tête |
Ksmedia.h |