Share via


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.
Não é o deslocamento do exemplo que o mecanismo de AMD 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 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

Confira também

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE