KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION
A solicitação de propriedade KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION especifica a posição de gravação atual do buffer WaveRT em bytes. O driver de descarregamento pode usar essas informações de posição de gravação para saber a quantidade de dados válidos no buffer WaveRT.
Tabela de Resumo de Uso
Obter | Definir | Destino | Tipo de descritor de propriedade | Tipo de valor da propriedade |
---|---|---|---|---|
Não |
Sim |
Nó por meio da instância de fixação |
KSP_NODE |
ULONG |
Valor retornado
A solicitação de propriedade KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION retorna STATUS_SUCCESS para indicar que foi concluída com êxito. Caso contrário, a solicitação retornará um erro apropriado status código.
Comentários
Para entender melhor como interpretar as informações fornecidas por essa solicitação de propriedade, suponha um buffer circular de tamanho n bytes. A posição de gravação inicial, antes de qualquer dado ser gravado, é 0. Os dados são gravados no buffer em partes que são um múltiplo de bytes WAVEFORMATEX.nBlockAlign .
Por exemplo, o buffer pode conter 20 ms de dados estéreo PCM de 16 bits, amostrados em 48000 Hz. Portanto, com base na descrição do membro nBlockAlign da estrutura WAVEFORMATEX , neste exemplo nBlockAlign = 2 * 16 / 8 = 4 bytes. Isso significa que o comprimento do buffer seria 48000 * 20 / 1000 = 960 quadros ou 960 * 4 = 3840 bytes.
A primeira solicitação Set especificará o número de bytes gravados no buffer. E como a "posição de gravação" é expressa em bytes, um valor de 1920 especificaria metade do tamanho do buffer, enquanto um valor de 3840 indicaria o tamanho total do buffer. Para determinar o número de novos bytes gravados, para fazer solicitações set subsequentes, o seguinte pseudocódigo mostra como o cálculo é executado:
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
Versão |
Windows 8 |
Cabeçalho |
Ksmedia.h |