Freigeben über


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

Weitere Informationen