Metodo IMiniportWaveCyclicStream::GetPosition (portcls.h)

Il GetPosition metodo ottiene la posizione corrente del flusso.

Sintassi

NTSTATUS GetPosition(
  [out] PULONG Position
);

Parametri

[out] Position

Puntatore di output per il valore di posizione. Questo parametro punta a una variabile allocata dal chiamante in cui il metodo scrive la posizione in byte corrente del flusso.

Valore restituito

GetPosition restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, il metodo restituisce un codice di errore appropriato.

Commenti

GetPosition segnala la posizione corrente di riproduzione o record del flusso. La posizione viene espressa come offset di byte dall'inizio del buffer DMA e rappresenta la stima migliore del driver miniport della posizione dei byte dei dati attualmente presenti nell'applicazione livello dati o in ADC.

La posizione è zero immediatamente dopo l'inizializzazione del flusso. Una transizione allo stato KSSTATE_STOP (vedere KSSTATE) reimposta la posizione su zero. Quando il flusso viene interrotto da una transizione da KSSTATE_RUN a KSSTATE_PAUSE o KSSTATE_ACQUIRE, la posizione si blocca. Si sblocca quando il flusso passa da KSSTATE_PAUSE o KSSTATE_ACQUIRE a KSSTATE_RUN.

GetPosition specifica la posizione come offset nel buffer ciclico. Quando la posizione raggiunge la fine del buffer ciclico, esegue il wrapping all'inizio del buffer. Di conseguenza, la posizione non supera mai le dimensioni del buffer.

Si noti che il valore di offset recuperato da una GetPosition chiamata è uno dei seguenti:

  • Per un flusso di rendering, il GetPosition metodo recupera la posizione di riproduzione, ovvero l'offset di byte dell'esempio attualmente riprodotto tramite l'applicazione livello dati e trasmesso tramite il jack dell'altoparlante.
  • Per un flusso di acquisizione, il GetPosition metodo recupera la posizione del record, ovvero l'offset di byte dell'ultimo campione da ricevere tramite il jack del microfono e acquisito da ADC.
Non è l'offset dell'esempio che il motore DMA nel dispositivo audio sta attualmente leggendo o scrivendo nel buffer audio.

Alcuni hardware audio contengono un registro di posizione per tenere traccia dell'offset di byte dell'esempio attualmente in ogni applicazione livello dati o ADC, nel qual caso il GetPosition metodo recupera semplicemente il contenuto del registro di posizione per il flusso appropriato. Altri hardware audio possono fornire al driver solo puntatori DMA nei buffer audio, nel qual caso il GetPosition metodo deve fornire una stima migliore dell'offset di byte nell'applicazione livello dati o in ADC in base alla posizione DMA corrente e ai ritardi di buffer interni al dispositivo.

L'hardware audio che memorizza internamente nel buffer una parte di un flusso di riproduzione o acquisizione potrebbe rendere più difficile ottenere una posizione precisa. In questo caso, il driver deve stimare la posizione corrente il più accuratamente possibile. Ad esempio, se un dispositivo audio esegue il prelettura del flusso di riproduzione in un buffer interno, il driver potrebbe dover prendere in considerazione sia le dimensioni del buffer che le informazioni sulla tempistica per stimare correttamente la posizione di riproduzione.

Il driver di porta WaveCyclic implementa un gestore di proprietà per KSPROPERTY_AUDIO_POSITION. Questo gestore di proprietà chiama il GetPosition metodo per ottenere la posizione corrente di riproduzione o record dal driver miniport. Per altre informazioni, vedere Proprietà Posizione audio.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione portcls.h (include Portcls.h)
IRQL <=DISPATCH_LEVEL

Vedi anche

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE