Freigeben über


EVT_ACX_STREAM_GET_CAPTURE_PACKET Rückruffunktion (acxstreams.h)

EvtAcxStreamGetCapturePacket teilt dem Treiber mit, anzugeben, welches Paket (0-basiert) zuletzt vollständig gefüllt wurde, einschließlich des QPC-Werts zu dem Zeitpunkt, zu dem der Treiber mit dem Füllen des Pakets begonnen hat.

Syntax

EVT_ACX_STREAM_GET_CAPTURE_PACKET EvtAcxStreamGetCapturePacket;

NTSTATUS EvtAcxStreamGetCapturePacket(
  ACXSTREAM Stream,
  PULONG LastCapturePacket,
  PULONGLONG QPCPacketStart,
  PBOOLEAN MoreData
)
{...}

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.

LastCapturePacket

Ein Wert, der die Position des letzten erfassten Pakets angibt. Dies ist ein 0-basierter Index, der angibt, wie viele vollständige Datenpakete erfasst wurden.

QPCPacketStart

Ein Wert, der die Startzeit des letzten erfassten Pakets angibt.

MoreData

Gibt TRUE zurück, wenn sofort weitere Daten bereit sind. Das Betriebssystem kann diese Routine optional sofort erneut aufrufen, nachdem das Paket verarbeitet wurde, um die nächsten Paketinformationen abzurufen. Wenn der Treiber FALSE zurückgibt, wird die Erfassung in Echtzeit ausgeführt.

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

Vor dem Lesen erfasster Audiodaten aus dem Audiopuffer ruft das Betriebssystem diese Routine auf, um Informationen zu den verfügbaren Daten abzurufen.

Die Paketnummer identifiziert ein Paket innerhalb des Datenstroms. Dies wird auf null zurückgesetzt, wenn EVT_ACX_STREAM_RELEASEHARDWARE für den Stream aufgerufen wurde. Die Zahl wird mit jedem erfassten Puffer erhöht. Von der Paketnummer kann das Betriebssystem den Paketspeicherort innerhalb des Audiopuffers ableiten und auch die Streamposition des Pakets relativ zum Start des Datenstroms ableiten.

Das Betriebssystem kann diese Routine jederzeit aufrufen. Im Normalbetrieb ruft das Betriebssystem diese Routine auf, nachdem der Treiber AcxRtStreamNotifyPacketComplete aufgerufen hat oder nachdem ein vorheriger Aufruf true für MoreData zurückgibt. Wenn das Betriebssystem diese Routine aufruft, kann der Treiber davon ausgehen, dass das Betriebssystem alle vorherigen Pakete gelesen hat. Wenn die Hardware genügend Daten erfasst hat, kann der Treiber sofort das nächste vollständige Paket in den Audiopuffer bereinigen und AcxRtStreamNotifyPacketComplete erneut aufrufen. Im Falle eines Aufzeichnungsüberlaufs (wenn das Betriebssystem Daten nicht schnell genug liest) kann der Audiotreiber einige Audiodaten löschen oder überschreiben. Der Audiotreiber löscht oder überschreibt zuerst die ältesten Daten. Der Audiotreiber kann seinen internen Paketzähler weiter voranbringen, auch wenn das Betriebssystem die Daten möglicherweise nicht gelesen hat.

Beispiel

Die Verwendungsbeispiele finden Sie unten.

#pragma code_seg("PAGE")
NTSTATUS
CodecC_EvtStreamGetCapturePacket(
    _In_ ACXSTREAM          Stream,
    _Out_ ULONG           * LastCapturePacket,
    _Out_ ULONGLONG       * QPCPacketStart,
    _Out_ BOOLEAN         * MoreData
)
{
    PCODEC_STREAM_CONTEXT ctx;
    CCaptureStreamEngine* streamEngine = nullptr;
    ULONG currentPacket;
    LONGLONG qpcPacketStart;

    PAGED_CODE();

    ctx = GetCodecStreamContext(Stream);
    // Retrieve the current packet that is being written to by the audio hardware
    currentPacket = (ULONG)InterlockedCompareExchange((LONG*)&ctx->CurrentPacket, -1, -1);
    qpcPacketStart = InterlockedCompareExchange64(&ctx->LastPacketStart.QuadPart, -1, -1);

    // The Last capture packet is the packet before the current packet.
    *LastCapturePacket = currentPacket - 1;
    *QPCPacketStart = (ULONGLONG)qpcPacketStart;
    *MoreData = FALSE;

    return STATUS_SUCCESS;
}

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