EVT_ACX_STREAM_PREPARE_HARDWARE Rückruffunktion (acxstreams.h)
Das EvtAcxStreamPrepareHardware Ereignis teilt dem Treiber mit, die Hardware für streaming vorzubereiten.
Syntax
EVT_ACX_STREAM_PREPARE_HARDWARE EvtAcxStreamPrepareHardware;
NTSTATUS EvtAcxStreamPrepareHardware(
ACXSTREAM Stream
)
{...}
Parameter
Stream
Ein ACXSTREAM -Objekt stellt einen Von einem Schaltkreis erstellten Audiodatenstrom dar. Der Datenstrom besteht aus einer Liste von Elementen, die basierend auf den Elementen des übergeordneten Schaltkreises erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX Objects.
Rückgabewert
Gibt STATUS_SUCCESS
zurück, wenn der Anruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.
Bemerkungen
Ein AcxStream unterstützt unterschiedliche Zustände. Diese Zustände geben an, wann Audio fließt (RUN-Zustand), Audio nicht fließt, aber Die Audiohardware wird vorbereitet (PAUSE-Zustand), oder Audio wird nicht fließen und Audiohardware nicht vorbereitet (STOP-Zustand).
Das EvtAcxStreamPrepareHardware-Ereignis übergibt den Datenstromstatus vom Stop-Zustand in den Pausenzustand. Der Treiber sollte alle Hardwareressourcen zuordnen, die für das Streaming in diesem Ereignis erforderlich sind, z. B. DMA-Engines.
Sobald sich der Datenstrom im Zustand "Pause" befindet, empfängt der Treiber möglicherweise das EvtAcxStreamRun Ereignis, um zum Ausführungszustand zu wechseln, oder der Treiber empfängt möglicherweise das EvtAcxStreamReleaseHardware Ereignis, um in den Status "Stopp" zu wechseln.
ACX-Ereignisse sind analog zu KS-Zuständen, wie in dieser Tabelle beschrieben.
Startstatus | Endstatus | ACX-Treiberereignis aufgerufen | Notizen |
---|---|---|---|
AUFHÖREN | ERWERBEN | PrepareHardware | Treiber führt Hardwarezuweisungen und Vorbereitungen durch. |
ERWERBEN | PAUSE | (Kein Anruf) | |
PAUSE | LAUFEN | Laufen | |
LAUFEN | PAUSE | Pause | |
PAUSE | ERWERBEN | (Kein Anruf) | |
ERWERBEN | AUFHÖREN | ReleaseHardware | Treiber gibt Hardwarezuweisungen frei |
EvtAcxStreamAllocateRtPackets wird vor EvtAcxStreamPrepareHardware aufgerufen, damit die RT-Paketzuordnung vor EvtAcxStreamPrepareHardware erfolgen kann.
Pufferzuweisungen und DMA
Die Pufferzuweisung umfasst in der Regel nur das Zuweisen des Systemspeichers so, dass sie mit der DMA-Hardware verwendet werden kann. In der Regel wirkt sich die Pufferzuweisung nicht auf die Streaminghardware aus. Die Vorbereitungshardwarephase wird verwendet, wenn der Treiber den Datenstrom für die Ausführung vorbereitet, indem Aufgaben wie das Reservieren der Bandbreite, die Programmierung von DMA und das Abschließen der Vorbereitung für die Anforderung zum Ausführen des Datenstroms ausgeführt werden. In der Regel verwendet der vorbereitende Hardwarecode die zugeordneten Puffer für die Vorbereitung des DMA und zugehöriger Aktivitäten, um den Datenstrom zu starten.
Speicherbereinigung
Die Paketzuweisungen (physischer Speicher auf dem System) werden vor dem EvtAcxStreamPrepareHardware durchgeführt, und ihre Veröffentlichung (EvtAcxStreamFreeRtPackets) erfolgt nach EvtAcxStreamReleaseHardware. Dieses Muster ist ein vorhandenes Legacyverhalten, das in den audiostream-Setupablauf der oberen Ebenen eingebettet ist (ks weisen Pufferpropit zu).
Die Entsorgung der Ressourcen des Datenstroms kann in der Datenstromkontextbereinigung (nicht zerstört) des Treibers erfolgen. Löschen Sie niemals alle Elemente, die im Kontext eines Objekts freigegeben sind, den Rückruf. Diese Anleitung gilt für alle ACX-Objekte.
Der Rückruf wird aufgerufen, nachdem der letzte Verweis nicht mehr vorhanden ist.
Der Bereinigungsrückruf des Datenstroms wird aufgerufen, wenn das Handle geschlossen wird. Eine Ausnahme davon ist, wenn der Treiber den Datenstrom in seinem Rückruf erstellt hat. Wenn ACX diesen Datenstrom nicht direkt vor der Rückgabe aus dem Datenstromerstellungsvorgang zu seiner Stream-Brücke hinzufügen konnte, wird der Datenstrom asynchron abgebrochen, und der aktuelle Thread gibt einen Fehler an den Create-Stream-Client zurück. Der Datenstrom sollte zu diesem Zeitpunkt keine Mem-Zuordnungen zugewiesen haben.
Beispiel
Die Beispielverwendung wird unten gezeigt.
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;
}
ACX-Anforderungen
Mindestens ACX-Version: 1.0
Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.
Anforderungen
Anforderung | Wert |
---|---|
Header- | acxstreams.h |
IRQL- | PASSIVE_LEVEL |