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