Partager via


EVT_ACX_STREAM_GET_PRESENTATION_POSITION fonction de rappel (acxstreams.h)

EvtAcxStreamGetPresentationPosition indique au pilote d’indiquer la position actuelle avec la valeur QPC au moment où la position actuelle a été calculée.

Syntaxe

EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;

NTSTATUS EvtAcxStreamGetPresentationPosition(
  ACXSTREAM Stream,
  PULONGLONG PositionInBlocks,
  PULONGLONG QPCPosition
)
{...}

Paramètres

Stream

Un objet ACXSTREAM représente un flux audio créé par un circuit. Le flux est composé d’une liste d’éléments créés en fonction des éléments du circuit parent. Pour plus d’informations, consultez ACX - Résumé des objets ACX.

PositionInBlocks

Spécifie le décalage de bloc entre le début du flux et la position post-décodée actuelle, non compressée dans le flux. Un « bloc » fait référence au groupe de canaux dans le même exemple. Par exemple, dans un flux PCM, un bloc est identique à un frame. Toutefois, pour les formats compressés, un bloc est un exemple unique dans un cadre. Cela signifie que pour un flux MP3 classique qui a 1152 échantillons dans une trame, il existe 1152 blocs.

QPCPosition

Spécifie la valeur du compteur de performances au moment où le pilote audio lit la position de présentation en réponse à l’appel KSAUDIO_PRESENTATION_POSITION. Un pilote écrit dans ce champ avec la valeur lue à partir de l’appel KeQueryPerformanceCounter lorsqu’un instantané est pris de la position de présentation.

Valeur de retour

Retourne STATUS_SUCCESS si l’appel a réussi. Sinon, elle retourne un code d’erreur approprié. Pour plus d’informations, consultez Using NTSTATUS Values.

Remarques

Exemple

L’exemple d’utilisation est illustré ci-dessous.

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

Configuration requise pour ACX

version minimale d’ACX : 1.0

Pour plus d’informations sur les versions ACX, consultez vue d’ensemble de la version ACX.

Exigences

Exigence Valeur
d’en-tête acxstreams.h
IRQL PASSIVE_LEVEL

Voir aussi