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 |