EVT_ACX_STREAM_GET_PRESENTATION_POSITION Rückruffunktion (acxstreams.h)
EvtAcxStreamGetPresentationPosition weist den Treiber an, die aktuelle Position zusammen mit dem QPC-Wert zum Zeitpunkt der Berechnung der aktuellen Position anzugeben.
Syntax
EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;
NTSTATUS EvtAcxStreamGetPresentationPosition(
ACXSTREAM Stream,
PULONGLONG PositionInBlocks,
PULONGLONG QPCPosition
)
{...}
Parameter
Stream
Ein ACXSTREAM-Objekt stellt einen audiostream dar, der von einer Verbindung erstellt wird. Der Stream besteht aus einer Liste von Elementen, die basierend auf den Elementen der übergeordneten Leitung erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX-Objekten.
PositionInBlocks
Gibt den Blockoffset vom Anfang des Datenstroms bis zur aktuellen postdekodierten, nicht komprimierten Position im Stream an. Ein "Block" bezieht sich auf die Gruppe von Kanälen im selben Beispiel. So ist beispielsweise in einem PCM-Stream ein Block mit einem Frame identisch. Für komprimierte Formate ist ein Block jedoch ein einzelnes Beispiel innerhalb eines Frames. Dies bedeutet, dass für einen typischen MP3-Stream mit 1152 Beispielen in einem Frame 1152 Blöcke vorhanden sind.
QPCPosition
Gibt den Wert des Leistungsindikators zu dem Zeitpunkt an, zu dem der Audiotreiber die Präsentationsposition als Reaktion auf den KSAUDIO_PRESENTATION_POSITION Aufruf liest. Ein Treiber schreibt in dieses Feld mit dem Wert aus dem Aufruf von KeQueryPerformanceCounter, wenn ein Momentaufnahme der Präsentationsposition übernommen wird.
Rückgabewert
Gibt zurück STATUS_SUCCESS
, wenn der Aufruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.
Bemerkungen
Beispiel
Die Verwendungsbeispiele finden Sie unten.
//
// 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;
}
ACX-Anforderungen
AcX-Mindestversion: 1.0
Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.
Anforderungen
Anforderung | Wert |
---|---|
Header | acxstreams.h |
IRQL | PASSIVE_LEVEL |