EVT_ACX_STREAM_GET_PRESENTATION_POSITION funzione di callback (acxstreams.h)
EvtAcxStreamGetPresentationPosition indica al driver di indicare la posizione corrente insieme al valore QPC al momento del calcolo della posizione corrente.
Sintassi
EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;
NTSTATUS EvtAcxStreamGetPresentationPosition(
ACXSTREAM Stream,
PULONGLONG PositionInBlocks,
PULONGLONG QPCPosition
)
{...}
Parametri
Stream
Un oggetto ACXSTREAM rappresenta un flusso audio creato da un circuito. Il flusso è costituito da un elenco di elementi creati in base agli elementi del circuito padre. Per altre informazioni, vedere ACX - Riepilogo degli oggetti ACX.
PositionInBlocks
Specifica l'offset del blocco dall'inizio del flusso alla posizione post-decodificata corrente, non compressa nel flusso. Un "blocco" fa riferimento al gruppo di canali nello stesso esempio. Ad esempio, in un flusso PCM un blocco è uguale a un frame. Tuttavia, per i formati compressi un blocco è un singolo esempio all'interno di un frame. Ciò significa che per un flusso MP3 tipico con 1152 campioni in un frame sono presenti 1152 blocchi.
QPCPosition
Specifica il valore del contatore delle prestazioni al momento in cui il driver audio legge la posizione della presentazione in risposta alla chiamata KSAUDIO_PRESENTATION_POSITION. Un driver scrive in questo campo con il valore letto dalla chiamata a KeQueryPerformanceCounter quando viene creato uno snapshot della posizione della presentazione.
Valore restituito
Restituisce STATUS_SUCCESS
se la chiamata ha avuto esito positivo. In caso contrario, restituisce un codice di errore appropriato. Per altre informazioni, vedere Uso dei valori NTSTATUS.
Commenti
Esempio
Di seguito è riportato un esempio di utilizzo.
//
// Init streaming callbacks.
//
ACX_RT_STREAM_CALLBACKS rtCallbacks;
ACX_RT_STREAM_CALLBACKS_INIT(&rtCallbacks);
rtCallbacks.EvtAcxStreamGetPresentationPosition = EvtStreamGetPresentationPosition;
status = AcxStreamInitAssignAcxRtStreamCallbacks(StreamInit, &rtCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamGetPresentationPosition(
_In_ ACXSTREAM Stream,
_Out_ PULONGLONG PositionInBlocks,
_Out_ PULONGLONG QPCPosition
)
{
PSTREAM_CONTEXT ctx;
ULONG blockAlign;
LARGE_INTEGER qpc;
PAGED_CODE();
ctx = GetStreamContext(Stream);
blockAlign = AcxDataFormatGetBlockAlign(ctx->StreamFormat);
// Recalculate the stream position that is stored in ctx->StreamPosition
UpdateStreamPosition(Stream);
qpc = KeQueryPerformanceCounter(NULL);
*PositionInBlocks = ctx->StreamPosition / blockAlign;
*QPCPosition = qpc;
return STATUS_SUCCESS;
}
Requisiti di ACX
Versione minima di ACX: 1.0
Per altre informazioni sulle versioni ACX, vedere La panoramica della versione di ACX.
Requisiti
Requisito | Valore |
---|---|
Intestazione | acxstreams.h |
IRQL | PASSIVE_LEVEL |