Método IMiniportWaveCyclicStream::GetPosition (portcls.h)
O GetPosition
método 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 pelo chamador na qual o método grava a posição de byte atual do fluxo.
Retornar valor
GetPosition
retornará STATUS_SUCCESS se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um código de erro apropriado.
Comentários
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 DMA e representa a melhor estimativa do driver de miniporte da posição de bytes 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 ao redor até o início do buffer. Portanto, a posição nunca excede o tamanho do buffer.
Observe que o valor de deslocamento recuperado por uma GetPosition
chamada é um dos seguintes:
-
Para um fluxo de renderização, o
GetPosition
método 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 pela tomada do alto-falante. -
Para um fluxo de captura, o
GetPosition
método recupera a posição do registro, que é o deslocamento de bytes do exemplo mais recente a ser recebido por meio da tomada do microfone e capturado pelo ADC.
Alguns hardwares de áudio contêm um registro de posição para controlar o deslocamento de bytes do exemplo atualmente em cada DAC ou ADC, nesse caso, o GetPosition
método 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 GetPosition
método deve fornecer uma melhor estimativa do deslocamento de bytes no DAC ou no ADC com base na posição atual do AMD e os atrasos de buffer internos para o dispositivo.
O hardware de áudio que armazena internamente em buffer uma parte de um fluxo de reprodução ou captura pode dificultar a obtenção de uma leitura de posição precisa. Nesse caso, o driver deve estimar a posição atual da forma mais precisa possível. Por exemplo, se um dispositivo de áudio pré-busca o fluxo de reprodução em um buffer interno, o driver pode precisar 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 GetPosition
método para obter a posição de reprodução ou registro atual do driver de miniporto. Para obter mais informações, consulte Propriedade Audio Position.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | portcls.h (inclua Portcls.h) |
IRQL | <=DISPATCH_LEVEL |