Partilhar via


Método IMiniportWaveCyclicStream::GetPosition (portcls.h)

O método GetPosition obtém a posição atual do fluxo.

Sintaxe

NTSTATUS GetPosition(
  [out] PULONG Position
);

Parâmetros

[out] Position

Ponteiro de saída para o valor da posição. Esse parâmetro aponta para uma variável alocada por chamador na qual o método grava a posição de byte atual do fluxo.

Valor de retorno

GetPosition retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um código de erro apropriado.

Observações

GetPosition relata a posição atual de reprodução ou registro do fluxo. A posição é expressa como um deslocamento de bytes desde o início do buffer de DMA e representa a melhor estimativa do driver de miniporto da posição de byte dos dados atualmente no DAC ou no ADC.

A posição é zero imediatamente após a inicialização do fluxo. Uma transição para o estado KSSTATE_STOP (consulte KSSTATE) redefine a posição como zero. Quando o fluxo é interrompido por uma transição de KSSTATE_RUN para KSSTATE_PAUSE ou KSSTATE_ACQUIRE, a posição congela. Ele descongela quando o fluxo faz a transição de KSSTATE_PAUSE ou KSSTATE_ACQUIRE de volta para KSSTATE_RUN.

GetPosition especifica a posição como um deslocamento para o buffer cíclico. Quando a posição atinge o final do buffer cíclico, ela é encapsulada para o início do buffer. Portanto, a posição nunca excede o tamanho do buffer.

Observe que o valor de deslocamento recuperado por uma chamada GetPosition é um dos seguintes:

  • Para um fluxo de renderização, o método GetPosition recupera a posição de reprodução, que é o deslocamento de bytes do exemplo que está sendo reproduzido no momento por meio do DAC e transmitido pelo alto-falante.
  • Para um fluxo de captura, o método GetPosition recupera a posição do registro, que é o deslocamento de bytes do exemplo mais recente a ser recebido por meio da tomada de microfone e capturado pelo ADC.
Não é o deslocamento do exemplo que o mecanismo de DMA no dispositivo de áudio está lendo ou gravando no buffer de áudio no momento.

Alguns hardwares de áudio contêm um registro de posição para acompanhar o deslocamento de bytes do exemplo atualmente em cada DAC ou ADC, nesse caso, o método GetPosition simplesmente recupera o conteúdo do registro de posição para o fluxo apropriado. Outro hardware de áudio só pode fornecer ao driver ponteiros DMA para os buffers de áudio, nesse caso, o método GetPosition deve fornecer uma melhor estimativa do deslocamento de bytes no DAC ou ADC com base na posição atual do DMA e o buffer atrasa interno para o dispositivo.

O hardware de áudio que armazena internamente uma parte de um fluxo de reprodução ou captura pode tornar uma leitura de posição precisa mais difícil de obter. Nesse caso, o driver deve estimar a posição atual da forma mais precisa possível. Por exemplo, se um dispositivo de áudio pré-realizar o fluxo de reprodução em um buffer interno, talvez o driver precise levar em conta o tamanho do buffer e as informações de tempo para estimar corretamente a posição de reprodução.

O driver de porta WaveCyclic implementa um manipulador de propriedades para KSPROPERTY_AUDIO_POSITION. Esse manipulador de propriedades chama o método GetPosition para obter a posição de reprodução ou registro atual do driver de miniporto. Para obter mais informações, consulte de propriedade de posição de áudio.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho portcls.h (inclua Portcls.h)
IRQL <=DISPATCH_LEVEL

Consulte também

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE