Compartir a través de


EVT_ACX_STREAM_GET_PRESENTATION_POSITION función de devolución de llamada (acxstreams.h)

EvtAcxStreamGetPresentationPosition indica al controlador que indique la posición actual junto con el valor QPC en el momento en que se calculó la posición actual.

Sintaxis

EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;

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

Parámetros

Stream

Un objeto ACXSTREAM representa una secuencia de audio creada por un circuito. La secuencia se compone de una lista de elementos creados en función de los elementos del circuito primario. Para obtener más información, vea ACX : resumen de objetos ACX.

PositionInBlocks

Especifica el desplazamiento de bloque desde el inicio de la secuencia hasta la posición postcodificada actual, sin comprimir en la secuencia. Un "bloque" hace referencia al grupo de canales del mismo ejemplo. Por lo tanto, por ejemplo, en una secuencia PCM, un bloque es el mismo que un marco. Sin embargo, en el caso de los formatos comprimidos, un bloque es un ejemplo único dentro de un marco. Esto significa que para una secuencia MP3 típica que tiene 1152 muestras en un marco, hay 1152 bloques.

QPCPosition

Especifica el valor del contador de rendimiento en el momento en que el controlador de audio lee la posición de presentación en respuesta a la llamada KSAUDIO_PRESENTATION_POSITION. Un controlador escribe en este campo con el valor leído desde la llamada a KeQueryPerformanceCounter cuando se toma una instantánea de la posición de presentación.

Valor devuelto

Devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, devuelve un código de error adecuado. Para obtener más información, vea Uso de valores NTSTATUS.

Comentarios

Ejemplo

A continuación se muestra el uso de ejemplo.

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

Requisitos de ACX

Versión mínima de ACX: 1.0

Para obtener más información sobre las versiones de ACX, consulte Introducción a la versión de ACX.

Requisitos

Requisito Valor
Header acxstreams.h
IRQL PASSIVE_LEVEL

Consulte también