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 Von einem Schaltkreis erstellten Audiodatenstrom dar. Der Datenstrom besteht aus einer Liste von Elementen, die basierend auf den Elementen des übergeordneten Schaltkreises erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX Objects.

PositionInBlocks

Gibt den Blockoffset vom Anfang des Datenstroms bis zur aktuellen postcodierten, nicht komprimierten Position im Datenstrom an. Ein "Block" bezieht sich auf die Gruppe von Kanälen im selben Beispiel. Beispielsweise ist in einem PCM-Stream ein Block identisch mit einem Frame. Bei komprimierten Formaten ist ein Block jedoch ein einzelnes Beispiel in einem Frame. 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 zum Zeitpunkt an, zu dem der Audiotreiber die Präsentationsposition als Reaktion auf den KSAUDIO_PRESENTATION_POSITION Anruf liest. Ein Treiber schreibt in dieses Feld mit dem Wert, der aus dem Aufrufen KeQueryPerformanceCounter gelesen wird, wenn eine Momentaufnahme der Präsentationsposition erstellt wird.

Rückgabewert

Gibt STATUS_SUCCESS zurück, wenn der Anruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.

Bemerkungen

Beispiel

Die Beispielverwendung wird unten gezeigt.

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

Mindestens ACX-Version: 1.0

Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.

Anforderungen

Anforderung Wert
Header- acxstreams.h
IRQL- PASSIVE_LEVEL

Siehe auch