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

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

Sintaxe

NTSTATUS GetPosition(
  [out] PULONGLONG Position
);

Parâmetros

[out] Position

Ponteiro de saída para o valor da posição. Esse parâmetro aponta para uma variável ULONGLONG 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 retorna um código de erro apropriado.

Comentários

A posição indicada pelo GetPosition método é expressa como um deslocamento de bytes desde o início do fluxo. Ele representa a melhor estimativa do driver de miniporte da posição de byte dos dados atualmente no DAC ou no ADC. O objeto miniport é necessário para manter a posição do fluxo com base nos mapeamentos adquiridos, independentemente de os mapeamentos serem liberados ou revogados.

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.

A posição relatada por GetPosition não é um deslocamento para um buffer físico que o driver alocou ou um cliente alocou. Em vez disso, o deslocamento é relativo ao fluxo e pode ser considerado como um deslocamento para um buffer idealizado que contém todo o fluxo e é contíguo do início ao fim. Quaisquer deslocamentos internos que apontem para os buffers físicos reais que contêm os dados precisam ser mantidos separadamente.

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 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 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 ADC com base na posição DMA atual e os atrasos de buffer internos no 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, 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 WavePci 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 miniport. Para obter mais informações, consulte Propriedade Audio Position.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho portcls.h (inclua Portcls.h)
IRQL PASSIVE_LEVEL

Confira também

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE