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.
EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;
NTSTATUS EvtAcxStreamGetPresentationPosition(
ACXSTREAM Stream,
PULONGLONG PositionInBlocks,
PULONGLONG QPCPosition
)
{...}
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.
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.
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;
}
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.
Requisito | Valor |
---|---|
Header | acxstreams.h |
IRQL | PASSIVE_LEVEL |