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