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 di valori NTSTATUS.

Osservazioni

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 il EvtAcxStreamPrepareHardware evento per la transizione allo stato Pause o l'oggetto ACXSTREAM potrebbe essere eliminato definitivamente.

Gli eventi ACX sono analoghi agli stati KS descritti in questa tabella.

Stato iniziale Stato finale Evento del driver ACX denominato Note
FERMARSI ACQUISTARE PrepareHardware Il driver esegue allocazioni e preparativi hardware
ACQUISTARE PAUSA (Nessuna chiamata)
PAUSA CORRERE Correre
CORRERE PAUSA Pausa
PAUSA ACQUISTARE (Nessuna chiamata)
ACQUISTARE FERMARSI ReleaseHardware Il driver rilascia le allocazioni hardware

Al termine dell'uso del flusso, evtAcxStreamFreeRtPackets viene chiamato dopo EvtAcxStreamReleaseHardware. Ciò consente alla fase hardware di rilascio di completare la deallocazione della larghezza di banda, liberando le risorse DMA e qualsiasi altra pulizia associata, di verificarsi prima che i buffer RT allocati vengano quindi 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 l'eliminazione di qualsiasi elemento condiviso nel contesto di un oggetto distrugga il callback. Queste linee guida si applicano a tutti gli oggetti ACX.

Il callback di eliminazione viene richiamato dopo che l'ultimo riferimento è andato, 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 bridge di flusso appena 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 ACX

versione minima di ACX: 1.0

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

Fabbisogno

Requisito Valore
intestazione acxstreams.h
IRQL PASSIVE_LEVEL

Vedere anche