EVT_ACX_STREAM_GET_CAPTURE_PACKET fonction de rappel (acxstreams.h)
EvtAcxStreamGetCapturePacket indique au pilote quel paquet (basé sur 0) a été complètement rempli récemment, y compris la valeur QPC au moment où le pilote a commencé à remplir le paquet.
Syntaxe
EVT_ACX_STREAM_GET_CAPTURE_PACKET EvtAcxStreamGetCapturePacket;
NTSTATUS EvtAcxStreamGetCapturePacket(
ACXSTREAM Stream,
PULONG LastCapturePacket,
PULONGLONG QPCPacketStart,
PBOOLEAN MoreData
)
{...}
Paramètres
Stream
Un objet ACXSTREAM représente un flux audio créé par un circuit. Le flux est composé d’une liste d’éléments créés en fonction des éléments du circuit parent. Pour plus d’informations, consultez ACX - Résumé des objets ACX.
LastCapturePacket
Valeur indiquant la position du dernier paquet capturé. Il s’agit d’un index de base 0 qui indique le nombre de paquets de données complets qui ont été capturés.
QPCPacketStart
Valeur indiquant l’heure de début du dernier paquet capturé.
MoreData
Retourne TRUE s’il y a plus de données prêtes immédiatement. Le système d’exploitation peut éventuellement appeler immédiatement cette routine après avoir traité le paquet pour obtenir les informations sur le paquet suivant. Si le pilote retourne FALSE, la capture fonctionne en temps réel.
Valeur retournée
Retourne STATUS_SUCCESS
si l’appel a réussi. Sinon, elle retourne un code d’erreur approprié. Pour plus d’informations, consultez Utilisation de valeurs NTSTATUS.
Remarques
Avant de lire les données audio capturées à partir de la mémoire tampon audio, le système d’exploitation appelle cette routine pour obtenir des informations sur les données disponibles.
Le numéro de paquet identifie un paquet dans le flux. Cette opération est réinitialisée à zéro lorsque EVT_ACX_STREAM_RELEASEHARDWARE a été appelée pour le flux. Le nombre avance avec chaque mémoire tampon capturée. À partir du numéro de paquet, le système d’exploitation peut dériver l’emplacement du paquet dans la mémoire tampon audio et peut également dériver la position du flux du paquet par rapport au début du flux.
Le système d’exploitation peut appeler cette routine à tout moment. En fonctionnement normal, le système d’exploitation appelle cette routine après que le pilote a appelé AcxRtStreamNotifyPacketComplete ou qu’un appel précédent retourne true pour MoreData. Lorsque le système d’exploitation appelle cette routine, le pilote peut supposer que le système d’exploitation a terminé de lire tous les paquets précédents. Si le matériel a capturé suffisamment de données, le pilote peut immédiatement faire exploser le paquet complet suivant dans la mémoire tampon audio et appeler à nouveau AcxRtStreamNotifyPacketComplete. En cas de dépassement de capacité de capture (lorsque le système d’exploitation ne lit pas les données assez rapidement), le pilote audio peut supprimer ou remplacer certaines données audio. Le pilote audio supprime ou remplace d’abord les données les plus anciennes. Le pilote audio peut continuer à avancer son compteur de paquets interne même si le système d’exploitation n’a peut-être pas lu les données.
Exemple
L’exemple d’utilisation est illustré ci-dessous.
#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;
}
Configuration requise pour ACX
Version ACX minimale : 1.0
Pour plus d’informations sur les versions d’ACX, consultez Vue d’ensemble des versions d’ACX.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | acxstreams.h |
IRQL | PASSIVE_LEVEL |