Freigeben über


EVT_ACX_STREAM_GET_CAPTURE_PACKET Rückruffunktion (acxstreams.h)

EvtAcxStreamGetCapturePacket weist den Treiber an, anzugeben, welches Paket (0-basiert) zuletzt vollständig gefüllt wurde, einschließlich des QPC-Werts zum Zeitpunkt, zu dem der Treiber mit dem Ausfü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 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.

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 nach der Verarbeitung des Pakets erneut aufrufen, um die nächsten Paketinformationen abzurufen. Wenn der Treiber FALSE zurückgibt, wird die Erfassung in Echtzeit ausgeführt.

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

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 Datenstrom aufgerufen wurde. Die Zahl wechselt mit jedem erfassten Puffer. Von der Paketnummer kann das Betriebssystem den Paketspeicherort innerhalb des Audiopuffers ableiten und auch die Streamposition des Pakets relativ zum Anfang des Datenstroms ableiten.

Das Betriebssystem kann diese Routine jederzeit aufrufen. Im normalen Betrieb ruft das Betriebssystem diese Routine auf, nachdem der Treiber AcxRtStreamNotifyPacketComplete oder nach einem vorherigen 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 das nächste vollständige Paket sofort in den Audiopuffer aufbrechen und AcxRtStreamNotifyPacketComplete erneut aufrufen. Im Falle des Überlaufs der Aufnahme (wenn das Betriebssystem daten nicht schnell genug liest) kann der Audiotreiber einige Audiodaten ablegen oder überschreiben. Der Audiotreiber legt die ältesten Daten zuerst ab oder überschreibt sie. Der Audiotreiber kann weiterhin seinen internen Paketzähler voranbringen, obwohl das Betriebssystem die Daten möglicherweise nicht gelesen hat.

Beispiel

Die Beispielverwendung wird unten gezeigt.

#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

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