Partager via


EVT_ACX_STREAM_RELEASE_HARDWARE fonction de rappel (acxstreams.h)

L’événement EvtAcxStreamReleaseHardware indique au pilote de libérer tout matériel alloué au flux et de placer le flux à l’état Stop.

Syntaxe

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

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.

Valeur retournée

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

Remarques

Un AcxStream prend en charge différents états. Ces états indiquent quand l’audio circule (état RUN), que l’audio ne circule pas mais que le matériel audio est préparé (état PAUSE), ou que l’audio ne circule pas et que le matériel audio n’est pas préparé (état STOP).

L’événement EvtAcxStreamReleaseHardware fait passer l’état de flux de l’état Pause à l’état Stop. Le pilote doit libérer toutes les ressources matérielles qui ont été allouées pour la diffusion en continu dans cet événement, telles que les moteurs DMA. Une fois que le flux est à l’état Stop, le pilote peut recevoir l’événement EvtAcxStreamPrepareHardware pour passer à l’état Pause ou l’objet ACXSTREAM peut être détruit.

Les événements ACX sont analogues aux états KS, comme décrit dans ce tableau.

État de début État final Événement du pilote ACX appelé Notes
STOP ACQUÉRIR PrepareHardware Le pilote effectue des allocations et des préparations matérielles
ACQUÉRIR PAUSE (Aucun appel)
PAUSE EXÉCUTER Exécuter
EXÉCUTER PAUSE Suspendre
PAUSE ACQUÉRIR (Aucun appel)
ACQUÉRIR STOP ReleaseHardware Le pilote libère les allocations matérielles

Une fois le travail avec le flux terminé, EvtAcxStreamFreeRtPackets est appelé après EvtAcxStreamReleaseHardware. Cela permet à la phase de mise en production matérielle de terminer la désaffectation de la bande passante, libérant les ressources DMA et tout autre nettoyage associé, avant que les mémoires tampons RT allouées ne soient ensuite libérées.

Nettoyage de la mémoire

La suppression des ressources du flux peut être effectuée dans le cadre du nettoyage du contexte de flux du pilote (et non de la destruction). Ne mettez jamais la disposition de tout ce qui est partagé dans le contexte d’un objet détruire le rappel. Ces instructions s’appliquent à tous les objets ACX.

Le rappel de destruction est appelé une fois que la dernière référence a disparu, lorsqu’elle est inconnue.

Le rappel de nettoyage du flux est appelé lorsque le handle est fermé. Une exception à cela est lorsque le pilote a créé le flux dans son rappel. Si ACX n’a pas pu ajouter ce flux à son pont de flux juste avant de revenir de l’opération de création de flux, le flux est annulé de manière asynchrone et le thread actuel retourne une erreur au client create-stream. Aucune allocation mem ne doit être allouée au flux à ce stade.

Exemple

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

    ACX_STREAM_CALLBACKS streamCallbacks;
    ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
    streamCallbacks.EvtAcxStreamReleaseHardware = EvtStreamReleaseHardware;
    ...
    status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamReleaseHardware(
    _In_ ACXSTREAM Stream
    )
{
    PSTREAM_CONTEXT ctx;
    NTSTATUS        status;

    PAGED_CODE();

    ctx = GetStreamContext(Stream);

    status = ReleaseStreamHardware(Stream);

    ctx->StreamState = AcxStreamStateStop;

    return status;
}

Configuration requise d’ACX

Version minimale d’ACX : 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