Condividi tramite


EVT_ACX_STREAM_RELEASE_HARDWARE funzione di callback (acxstreams.h)

L'evento EvtAcxStreamReleaseHardware indica al driver di rilasciare qualsiasi hardware allocato per il flusso e inserire il flusso nello stato Stop.

Sintassi

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

Parametri

Stream

Un oggetto ACXSTREAM rappresenta un flusso audio creato da un circuito. Il flusso è costituito da un elenco di elementi creati in base agli elementi del circuito padre. Per altre informazioni, vedere ACX - Riepilogo degli oggetti ACX.

Valore restituito

Restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, restituisce un codice di errore appropriato. Per altre informazioni, vedere Uso dei valori NTSTATUS.

Commenti

AcxStream supporta stati diversi. Questi stati indicano quando l'audio scorre (stato RUN), l'audio non scorre, ma l'hardware audio è preparato (stato PAUSE) o l'audio non scorre e l'hardware audio non è preparato (stato STOP).

L'evento EvtAcxStreamReleaseHardware eseguirà la transizione dello stato del flusso dallo stato Pause allo stato Stop. Il driver deve rilasciare tutte le risorse hardware allocate per lo streaming in questo evento, ad esempio i motori DMA. Quando il flusso è nello stato Stop, il driver potrebbe ricevere l'evento EvtAcxStreamPrepareHardware per passare allo stato Pause o l'oggetto ACXSTREAM potrebbe essere eliminato definitivamente.

Gli eventi ACX sono analoghi agli stati KS, come descritto in questa tabella.

Stato di avvio Stato finale Evento driver ACX chiamato Note
STOP ACQUISIRE PrepareHardware Il driver esegue allocazioni e preparativi hardware
ACQUISIRE PAUSE (Nessuna chiamata)
PAUSE ESEGUI Esegui
ESEGUI PAUSE Sospendi
PAUSE ACQUISIRE (Nessuna chiamata)
ACQUISIRE STOP ReleaseHardware Il driver rilascia le allocazioni hardware

Al termine dell'uso del flusso, EvtAcxStreamFreeRtPackets viene chiamato dopo EvtAcxStreamReleaseHardware. In questo modo è possibile completare la fase hardware di rilascio per completare la deallocazione della larghezza di banda, liberando le risorse DMA e qualsiasi altra pulizia associata, prima che i buffer RT allocati vengano liberati.

Pulizia della memoria

L'eliminazione delle risorse del flusso può essere eseguita nella pulizia del contesto del flusso del driver (non distruggere). Non inserire mai lo smaltimento di tutto ciò che viene condiviso nel contesto di un oggetto eliminano definitivamente il callback. Queste indicazioni si applicano a tutti gli oggetti ACX.

Il callback di eliminazione definitiva viene richiamato dopo che l'ultimo riferimento non è più presente, quando è sconosciuto.

Il callback di pulizia del flusso viene chiamato quando l'handle viene chiuso. Un'eccezione è quando il driver ha creato il flusso nel callback. Se ACX non è riuscito ad aggiungere questo flusso al relativo flusso-bridge subito prima di tornare dall'operazione di creazione del flusso, il flusso viene annullato asincrono e il thread corrente restituisce un errore al client create-stream. Il flusso non deve avere allocazioni mem allocate a questo punto.

Esempio

Di seguito è riportato un esempio di utilizzo.

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

Requisiti di ACX

Versione minima di ACX: 1.0

Per altre informazioni sulle versioni ACX, vedere La panoramica della versione di ACX.

Requisiti

Requisito Valore
Intestazione acxstreams.h
IRQL PASSIVE_LEVEL

Vedi anche