Condividi tramite


Metodo IMiniportWavePciStream::GetPosition (portcls.h)

Il GetPosition metodo ottiene la posizione corrente del flusso.

Sintassi

NTSTATUS GetPosition(
  [out] PULONGLONG Position
);

Parametri

[out] Position

Puntatore di output per il valore di posizione. Questo parametro punta a una variabile ULONG 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 esito positivo. In caso contrario, il metodo restituisce un codice di errore appropriato.

Commenti

La posizione indicata dal GetPosition metodo è espressa come offset di byte dall'inizio del flusso. Rappresenta la stima migliore del driver miniport della posizione di byte dei dati attualmente presenti nell'applicazione livello dati o in ADC. L'oggetto miniport è necessario per mantenere la posizione di flusso in base ai mapping acquisiti, indipendentemente dal fatto che i mapping vengano rilasciati o revocati.

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 arrestato da una transizione da KSSTATE_RUN a KSSTATE_PAUSE o KSSTATE_ACQUIRE, la posizione viene bloccata. Non libera quando il flusso passa da KSSTATE_PAUSE o KSSTATE_ACQUIRE indietro a KSSTATE_RUN.

La posizione segnalata da GetPosition non è un offset in un buffer fisico allocato dal driver o da un client allocato. L'offset è invece relativo al flusso e può essere considerato come offset in un buffer idealizzato che contiene l'intero flusso ed è contiguo dall'inizio alla fine. Eventuali offset interni che puntano ai buffer fisici effettivi che contengono i dati devono essere mantenuti separatamente.

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 posizione per tenere traccia dell'offset di byte del campione 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 solo il driver con 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 ADC in base alla posizione DMA corrente e al ritardo del buffer interno al dispositivo.

L'hardware audio che buffera internamente 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 recupera il 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 della porta WavePci implementa un gestore delle proprietà per KSPROPERTY_AUDIO_POSITION. Questo gestore delle 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 (includere Portcls.h)
IRQL PASSIVE_LEVEL

Vedi anche

IMiniportWavePciStream

KSPROPERTY_AUDIO_POSITION

KSSTATE