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