Compartir a través de


KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

La solicitud de propiedad KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION especifica la posición de escritura actual del búfer waveRT en bytes. El controlador de descarga puede usar esta información de posición de escritura para saber cuánto datos válidos hay en el búfer de WaveRT.

Tabla de resumen de uso

Obtener Set Destino Tipo de descriptor de propiedad Tipo de valor de propiedad

No

Nodo a través de la instancia de Pin

KSP_NODE

ULONG

Valor devuelto

La solicitud de propiedad KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION devuelve STATUS_SUCCESS para indicar que se ha completado correctamente. De lo contrario, la solicitud devuelve un código de estado de error adecuado.

Observaciones

Para comprender mejor cómo interpretar la información proporcionada por esta solicitud de propiedad, supongamos un búfer circular de tamaño n bytes. La posición de escritura inicial, antes de escribir los datos, es 0. Los datos se escriben en el búfer en fragmentos que son varios bytes WAVEFORMATEX.nBlockAlign .

Por ejemplo, el búfer podría contener 20 ms de datos estéreo PCM de 16 bits, muestreados a 48000 Hz. Por lo tanto, en función de la descripción del miembro nBlockAlign de la estructura WAVEFORMATEX , en este ejemplo nBlockAlign = 2 * 16 / 8 = 4 bytes. Esto significa que la longitud del búfer sería 48000 * 20 / 1000 = 960 fotogramas o 960 * 4 = 3840 bytes.

La primera solicitud Set especificará el número de bytes escritos en el búfer. Y como la "posición de escritura" se expresa en bytes, un valor de 1920 especificaría la mitad del tamaño del búfer, mientras que un valor de 3840 indicaría el tamaño completo del búfer. Para determinar el número de bytes nuevos escritos, para realizar solicitudes Set posteriores, el pseudocódigo siguiente muestra cómo se realiza el cálculo:

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

Requisitos

Versión

Windows 8

Encabezado

Ksmedia.h

Vea también

WAVEFORMATEX