Compartir a través de


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

El evento EvtAcxStreamPrepareHardware indica al controlador que prepare el hardware para el streaming.

Sintaxis

EVT_ACX_STREAM_PREPARE_HARDWARE EvtAcxStreamPrepareHardware;

NTSTATUS EvtAcxStreamPrepareHardware(
  ACXSTREAM Stream
)
{...}

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.

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

AcxStream admite diferentes estados. Estos estados indican cuándo fluye el audio (estado RUN), el audio no fluye, pero el hardware de audio está preparado (estado PAUSE) o el audio no fluye y el hardware de audio no está preparado (estado STOP).

El evento EvtAcxStreamPrepareHardware pasará el estado de la secuencia del estado Stop al estado Pause. El controlador debe asignar los recursos de hardware necesarios para el streaming en este evento, como los motores DMA.

Una vez que la secuencia está en estado Pause, el controlador puede recibir el evento EvtAcxStreamRun para realizar la transición al estado Run o el controlador puede recibir el evento EvtAcxStreamReleaseHardware para pasar al estado Stop.

Los eventos ACX son análogos a los estados KS, como se describe en esta tabla.

Estado de inicio Estado final Evento de controlador ACX llamado Notas
STOP ADQUIRIR PrepareHardware El controlador realiza asignaciones de hardware y preparación
ADQUIRIR PAUSE (Sin llamada)
PAUSE EJECUTAR Ejecutar
EJECUTAR PAUSE Pausar
PAUSE ADQUIRIR (Sin llamada)
ADQUIRIR STOP ReleaseHardware El controlador libera asignaciones de hardware

Se llama a EvtAcxStreamAllocateRtPackets antes de que EvtAcxStreamPrepareHardware permita que la asignación de paquetes RT se produzca antes de EvtAcxStreamPrepareHardware.

Asignaciones de búfer y DMA

Normalmente, la asignación del búfer solo implica asignar memoria del sistema de forma que se pueda usar con el hardware DMA. Normalmente, la asignación del búfer no tendrá ningún efecto en el hardware de streaming. La fase de preparación del hardware se usa como controlador para preparar la secuencia para ejecutarse, completando tareas como reservar ancho de banda, programar DMA y completar la preparación de la solicitud para ejecutar el flujo. Normalmente, el código de hardware de preparación usará los búferes asignados para preparar la DMA y las actividades relacionadas para estar listos para iniciar la secuencia.

Limpieza de memoria

Las asignaciones de paquetes (memoria física en el sistema) se realizan antes de que EvtAcxStreamPrepareHardware y su lanzamiento (EvtAcxStreamFreeRtPackets) se realice después de EvtAcxStreamReleaseHardware. Este patrón es un comportamiento heredado existente que está incrustado en el flujo de instalación de secuencias de audio de capas superiores (ks asigna la propiedad de búfer init).

La eliminación de los recursos de la secuencia se puede realizar en la limpieza del contexto de flujo del controlador (no destruir). Nunca coloque la eliminación de nada que se comparta en el contexto de un objeto destruye la devolución de llamada. Esta guía se aplica a todos los objetos ACX.

La devolución de llamada de destrucción se invoca después de que se haya desaparecido la última referencia, cuando se desconoce.

Se llama a la devolución de llamada de limpieza de la secuencia cuando se cierra el identificador. Una excepción a esto es cuando el controlador creó la secuencia en su devolución de llamada. Si ACX no pudo agregar esta secuencia a su stream-bridge justo antes de volver de la operación stream-create, la secuencia se cancela asincrónica y el subproceso actual devuelve un error al cliente create-stream. La secuencia no debe tener asignaciones de mem asignadas en este momento.

Ejemplo

A continuación se muestra un ejemplo de uso.

    ACX_STREAM_CALLBACKS streamCallbacks;
    ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
    streamCallbacks.EvtAcxStreamPrepareHardware     = Codec_EvtStreamPrepareHardware;
    ...
    status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
#pragma code_seg("PAGE")
NTSTATUS
Codec_EvtStreamPrepareHardware(
    _In_ ACXSTREAM Stream
    )
{
    PSTREAM_CONTEXT ctx;
    NTSTATUS        status;

    PAGED_CODE();

    ctx = GetStreamContext(Stream);

    status = AllocateStreamHardware(Stream);

    if (NT_SUCCESS(status))
    {
        ctx->StreamState = AcxStreamStatePause;
    }

    return status;
}

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