Freigeben über


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

Siehe auch