Partilhar via


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

O método GetPosition 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.

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

A posição indicada pelo método GetPosition é expressa como um deslocamento de bytes desde o início do fluxo. Ele representa a melhor estimativa do driver de miniporto da posição de bytes 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 nenhum 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 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 conector do 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 WavePci 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 PASSIVE_LEVEL

Consulte também

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE