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.
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 |