Condividi tramite


Metodo IMiniportWaveCyclicStream::GetPosition (portcls.h)

Il metodo GetPosition ottiene la posizione corrente del flusso.

Sintassi

NTSTATUS GetPosition(
  [out] PULONG Position
);

Parametri

[out] Position

Puntatore di output per il valore della posizione. Questo parametro punta a una variabile allocata dal chiamante in cui il metodo scrive la posizione di 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.

Osservazioni

GetPosition segnala la posizione corrente del flusso. La posizione viene espressa come offset di byte dall'inizio del buffer DMA e rappresenta la migliore stima 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 chiamata GetPosition è uno dei seguenti:

  • Per un flusso di rendering, il metodo GetPosition 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 metodo GetPosition 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 dei byte dell'esempio attualmente in ogni applicazione livello dati o ADC, nel qual caso il metodo GetPosition semplicemente recupera 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 metodo GetPosition deve fornire una stima migliore dell'offset dei byte nell'applicazione livello dati o in ADC in base alla posizione DMA corrente e ai ritardi di buffering 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 metodo GetPosition per ottenere la posizione corrente di riproduzione o record dal driver miniport. Per altre informazioni, vedere proprietà Posizione audio.

Fabbisogno

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

Vedere anche

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE