KSSTREAM_HEADER structure (ks.h)
La structure KSSTREAM_HEADER est une structure de longueur variable qui décrit un paquet de données à lire ou à écrire dans une broche de pilote de streaming.
Syntaxe
typedef struct {
ULONG Size;
ULONG TypeSpecificFlags;
KSTIME PresentationTime;
LONGLONG Duration;
ULONG FrameExtent;
ULONG DataUsed;
PVOID Data;
ULONG OptionsFlags;
ULONG Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
Membres
Size
Spécifie la taille, en octets, de la structure. Il doit s’agir d’au moins sizeof(KSSTREAM_HEADER).
TypeSpecificFlags
Spécifie les indicateurs spécifiques à un format de données. Le seul indicateur actuellement pris en charge pour TypeSpecificFlags est KS_AM_UseNewCSSKey. Cet indicateur indique que le décodeur matériel doit basculer vers la prochaine clé de déchiffrement CSS (Content Scramble System) mise en file d’attente, car l’exemple de données qui suit immédiatement l’en-tête est le premier exemple de données auquel une nouvelle clé de titre s’applique.
PresentationTime
Structure KSTIME qui spécifie l’heure de présentation de la mémoire tampon de flux associée en unités de 100 nanosecondes. Pour plus d’informations, consultez la section Remarques.
Duration
Spécifie la durée de ce segment de flux dans les mêmes unités que l’heure de présentation (100 nanosecondes). Définissez sur zéro lorsqu’il n’est pas utilisé.
FrameExtent
Spécifie la taille de l’image entière. La région dans l’étendue du cadre est disponible pour le filtre, et la taille de données valide résultante pour l’opération de flux est répercutée dans le membre DataUsed .
DataUsed
Pour une opération d’écriture, ce membre spécifie le nombre d’octets dans le frame qui sont valides lors de l’envoi d’une image à un pilote de niveau inférieur. Les en-têtes ne sont pas modifiés lors d’une opération d’écriture ; Toutefois, le membre Information de la structure IO_STATUS_BLOCK contient le nombre total d’octets réellement écrits. Pour une opération de lecture, ce membre n’est pas utilisé lors de l’envoi d’une image à un pilote de niveau inférieur et doit être défini sur zéro. Au retour, ce membre contient le nombre d’octets réellement renseignés dans ce frame et le membre Information de la structure IO_STATUS_BLOCK contient la taille de la liste des en-têtes réellement utilisés. Notez que si le minidriver spécifie KSPIN_FLAG_GENERATE_MAPPINGS dans KSPIN_DESCRIPTOR_EX, lorsqu’un pointeur de flux est avancé au-delà d’une trame, DataUsed est défini sur Count moins Remaining (membres de KSSTREAM_POINTER_OFFSET). Si le pilote ne spécifie pas cet indicateur, le minidriver est responsable de la définition de DataUsed.
Data
Spécifie l’adresse virtuelle de la mémoire tampon de données.
OptionsFlags
Spécifie divers attributs du flux de données. Le membre OptionsFlags peut avoir les valeurs répertoriées dans le tableau suivant.
Valeur | Description |
---|---|
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY | Spécifie qu’il y a eu une discontinuité dans le flux de données avant les données contenues dans ce paquet. Cela implique que le filtre peut avoir besoin de réinitialiser son état interne avant de traiter les données. Aucune mémoire tampon de données réelle n’a besoin d’être attachée. |
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID | Spécifie que le membre Duration de cette structure est valide. |
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE | Indique que ce cadre représente la fin d’une séquence de photos. |
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM | Indique que cette trame représente la fin du flux de données. |
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE | Si le flux est suspendu, cette mémoire tampon doit être vidée. Cet indicateur est utilisé, par exemple, par les sources de données actives, où une pause restitue les données actuelles obsolètes. |
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO | Indique qu’il existe une structure KS_FRAME_INFO qui suit KSSTREAM_HEADER. |
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA | Cette mémoire tampon de données est le début des données en boucle. Le pilote doit effectuer une boucle sur ces données jusqu’à ce qu’elle s’arrête explicitement. |
KSSTREAM_HEADER_OPTIONSF_METADATA | Indique qu’une KSSTREAM_METADATA_INFO suit KS_FRAME_INFO après la KSSTREAM_HEADER. Cet indicateur est présent uniquement si KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA est pris en charge. |
KSSTREAM_HEADER_OPTIONSF_PREROLL | Les données de cette mémoire tampon sont utilisées pour amorcer l’état de l’appareil. Il s’agit d’une option spécifique au flux. |
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT | Le flux de données est à un point naturel pour l’épissage. Un client l’utilise, par exemple, lors de l’envoi de données qui utilisent la compression inter-images, telles que la vidéo MPEG, pour indiquer qu’il est sûr de l’épissage à ce stade. |
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY | Il existe une discontinuité dans le flux de données après ce paquet. Cet indicateur peut être utilisé pour les interfaces orientées positionnelles afin d’indiquer une fin de données de flux. Aucune mémoire tampon de données réelle n’a besoin d’être attachée. |
KSSTREAM_HEADER_OPTIONSF_TIMEVALID | Spécifie que le membre PresentationTime de cette structure est valide. Indique qu’un horodatage valide est associé à cette mémoire tampon. |
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED | Signifie que le format de données de ce flux a changé. Si cet indicateur est défini, le membre Data contient une structure KSDATAFORMAT qui contient le nouveau format. Cet indicateur est valide uniquement pour les flux qui ont précédemment négocié le changement de type dynamique. Pour une opération d’écriture, incluez le nouveau format de données à la place d’un exemple de média. Si la taille d’extension spécifique au média est modifiée, cet en-tête doit être le dernier en-tête d’une liste d’en-têtes pour la demande de flux donnée. Pendant une demande de lecture, toutes les autres E/S restent en attente jusqu’à ce que le nouveau format soit récupéré via KSPROPERTY_CONNECTION_DATAFORMAT. Pour une opération d’écriture, l’en-tête ne doit pas être étendu et doit être le seul en-tête de l’opération d’écriture. |
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER | Spécifie que le membre Data de l’en-tête de flux pointe vers une structure de type VRAM_SURFACE_INFO. Le module proxy KS fourni par le système définit cet indicateur pour indiquer qu’il capture directement dans VRAM. |
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER | Spécifie que le membre Data de KSSTREAM_HEADER contient une copie en mode noyau de la mémoire tampon d’origine. Ksproxy définit cet indicateur pour les petits transferts de données lors de la capture WVDDM (Windows Vista Display Driver Model). Si cet indicateur n’est pas défini, KS utilise des E/S directes dans la mémoire tampon de données . |
Reserved
Réservé à un usage interne.
Remarques
Cette structure peut être suivie en mémoire d’informations supplémentaires spécifiques au type de données dans le paquet de données.
Le temps de présentation est généralement en unités de 100 nanosecondes ; Toutefois, le format standard de cette fois est basé sur le format de données. Vous pouvez normaliser le temps de présentation en utilisant comme mise à l’échelle fractionnaire le KSSTREAM_HEADER. PresentationTime.Numerator divisé par le KSSTREAM_HEADER. PresentationTime.Denominator .
Une conversion doit d’abord utiliser le numérateur, puis le dénominateur, afin de réduire les erreurs d’arrondi. Par exemple, un flux audio peut présenter l’heure actuelle sous la forme d’un décalage d’octets dans le flux de données :
#define BITS_PER_BYTE8
#define NANOSECONDS10000000
StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;
Sur un IOCTL_KS_READ_STREAM, des parties de l’en-tête de flux sont remplies par l’appel. Chaque KSSTREAM_HEADER. L’élément DataUsed contient le nombre réel d’octets lus, qui est inférieur ou égal à chaque KSSTREAM_HEADER. FrameExtent. L’élément pIrp-IoStatus.Information contient la taille totale des données d’en-tête> à retourner, qui est au moins une sizeof(KSSTREAM_HEADER).
Sur un IOCTL_KS_WRITE_STREAM, les éléments membres doivent être initialisés et chaque KSSTREAM_HEADER. L’élément DataUsed contient le nombre d’octets à écrire. Le nombre réel d’octets écrits est retourné dans pIrp-IoStatus.Information>. Cette valeur est inférieure ou égale au total de tous les KSSTREAM_HEADER. Éléments DataUsed dans les en-têtes.
Si vous utilisez l’interface IKsReferenceClock pour obtenir des horodatages à placer dans le membre PresentationTime de KSSTREAM_HEADER, consultez Horloges AVStream pour plus d’informations.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | ks.h (inclure Ks.h) |