Partager via


EVT_ACX_STREAM_GET_PRESENTATION_POSITION fonction de rappel (acxstreams.h)

EvtAcxStreamGetPresentationPosition indique au pilote d’indiquer la position actuelle ainsi que 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 et non compressée actuelle dans le flux. Un « bloc » fait référence au groupe de canaux dans le même exemple. Ainsi, 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 frame. Cela signifie que pour un flux MP3 classique qui a 1152 exemples dans un frame, il y a 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 en appelant KeQueryPerformanceCounter lorsqu’une instantané est prise de la position de présentation.

Valeur retournée

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

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 ACX minimale : 1.0

Pour plus d’informations sur les versions d’ACX, consultez Vue d’ensemble des versions d’ACX.

Configuration requise

Condition requise Valeur
En-tête acxstreams.h
IRQL PASSIVE_LEVEL

Voir aussi