Freigeben über


EVT_ACX_STREAM_PREPARE_HARDWARE Rückruffunktion (acxstreams.h)

Das EvtAcxStreamPrepareHardware-Ereignis weist den Treiber an, die Hardware für das Streaming vorzubereiten.

Syntax

EVT_ACX_STREAM_PREPARE_HARDWARE EvtAcxStreamPrepareHardware;

NTSTATUS EvtAcxStreamPrepareHardware(
  ACXSTREAM Stream
)
{...}

Parameter

Stream

Ein ACXSTREAM-Objekt stellt einen audiostream dar, der von einer Verbindung erstellt wird. Der Stream besteht aus einer Liste von Elementen, die basierend auf den Elementen der übergeordneten Leitung erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX-Objekten.

Rückgabewert

Gibt zurück STATUS_SUCCESS , wenn der Aufruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.

Hinweise

Ein AcxStream unterstützt verschiedene Zustände. Diese Zustände geben an, wann Audio fließt (RUN-Zustand), Audio nicht fließt, aber die Audiohardware vorbereitet ist (PAUSE-Zustand), oder Audio fließt nicht und die Audiohardware ist nicht vorbereitet (STOP-Zustand).

Das EvtAcxStreamPrepareHardware-Ereignis wechselt den Streamzustand vom Status Beenden in den Zustand Anhalten. Der Treiber sollte alle Hardwareressourcen zuordnen, die für das Streaming in diesem Ereignis benötigt werden, z. B. DMA-Engines.

Sobald sich der Stream im Zustand Pause befindet, empfängt der Treiber möglicherweise das EvtAcxStreamRun-Ereignis , um in den Ausführungszustand zu wechseln, oder der Treiber empfängt das EvtAcxStreamReleaseHardware-Ereignis , um in den Status Stop zu wechseln.

ACX-Ereignisse entsprechen KS-Zuständen, wie in dieser Tabelle beschrieben.

Startzustand Endzustand ACX-Treiberereignis namens Hinweise
STOP ERWERBEN VorbereitenHardware Der Treiber führt Hardwarezuordnungen und Vorbereitungen aus.
ERWERBEN PAUSE (Kein Anruf)
PAUSE AUSFÜHREN Ausführen
AUSFÜHREN PAUSE Anhalten
PAUSE ERWERBEN (Kein Anruf)
ERWERBEN STOP ReleaseHardware Treiber gibt Hardwarezuordnungen frei

EvtAcxStreamAllocateRtPackets wird vor EvtAcxStreamPrepareHardware aufgerufen, um die RT-Paketzuordnung vor EvtAcxStreamPrepareHardware zuzulassen.

Pufferzuordnungen und DMA

Bei der Pufferzuordnung wird in der Regel nur der Systemspeicher so zugewiesen, dass er mit der DMA-Hardware verwendet werden kann. In der Regel hat die Pufferzuweisung keine Auswirkungen auf die Streaminghardware. Die Vorbereitungsphase der Hardware wird verwendet, wenn der Treiber den Stream zur Ausführung bereit macht, indem Aufgaben wie das Reservieren von Bandbreite, das Programmieren von DMA und die Vorbereitung für die Anforderung zum Ausführen des Datenstroms abgeschlossen werden. In der Regel verwendet der Hardwarevorbereitungscode die zugewiesenen Puffer, um den DMA und die zugehörigen Aktivitäten vorzubereiten, damit der Stream gestartet werden kann.

Speicherbereinigung

Die Paketzuordnungen (physischer Arbeitsspeicher auf dem System) erfolgen vor der EvtAcxStreamPrepareHardware, und ihre Freigabe (EvtAcxStreamFreeRtPackets) erfolgt nach EvtAcxStreamReleaseHardware. Dieses Muster ist ein vorhandenes Legacyverhalten, das in den Setupflow der oberen Ebenen des Audiostreams eingebettet ist (ks pufferprop init zuordnen).

Die Entsorgung der Ressourcen des Streams kann in der Streamkontextbereinigung des Treibers erfolgen (nicht zerstören). Setzen Sie niemals die Entsorgung von etwas, das im Kontext eines Objekts freigegeben ist, rückruflöschen. Diese Anleitung gilt für alle ACX-Objekte.

Der Rückruf zur Zerstörung wird aufgerufen, nachdem die letzte Ref nicht mehr vorhanden ist.

Der Rückruf zum Bereinigen des Datenstroms wird aufgerufen, wenn das Handle geschlossen wird. Eine Ausnahme ist, wenn der Treiber den Stream in seinem Rückruf erstellt hat. Wenn ACX diesen Stream seiner Streambrücke nicht hinzufügen konnte, bevor er vom Vorgang zum Erstellen von Datenstrom zurückgegeben wird, wird der Stream asynchron abgebrochen, und der aktuelle Thread gibt einen Fehler an den create-stream-Client zurück. Für den Stream sollten zu diesem Zeitpunkt keine Mem-Zuordnungen zugewiesen sein.

Beispiel

Die Verwendungsbeispiele finden Sie unten.

    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

AcX-Mindestversion: 1.0

Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.

Anforderungen

Anforderung Wert
Header acxstreams.h
IRQL PASSIVE_LEVEL

Weitere Informationen