Partager via


structure KSSTREAM_HEADER (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 diffusion en continu.

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 taille de(KSSTREAM_HEADER).

TypeSpecificFlags

Spécifie des 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 clé de déchiffrement CSS (Content Scramble System) en file d’attente suivante, 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 (unités de 100 nanosecondes). Défini 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 de trame est disponible pour le filtre et la taille de données valide résultante pour l’opération de flux est reflétée dans le membre DataUsed.

DataUsed

Pour une opération d’écriture, ce membre spécifie le nombre d’octets dans le cadre valide 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, l'Information membre 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 trame à un pilote de niveau inférieur et doit être défini sur zéro. Lors du retour, ce membre contient le nombre d’octets réellement renseignés dans ce cadre 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 restant (membres de KSSTREAM_POINTER_OFFSET). Si le pilote ne spécifie pas cet indicateur, le minidriver est chargé de définir DataUsed.

Data

Spécifie l’adresse virtuelle de la mémoire tampon de données.

OptionsFlags

Spécifie un large éventail d’attributs du flux de données. Les OptionsFlags membre peuvent 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 doit 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 la durée membre 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 des 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 suivante 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’il soit arrêté explicitement.
KSSTREAM_HEADER_OPTIONSF_METADATA Indique qu’il existe un KSSTREAM_METADATA_INFO qui 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 primer 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’épinglage. Un client utilise cela, par exemple, lors de l’envoi de données qui utilisent la compression entre images, comme la vidéo MPEG, pour indiquer qu’il est sûr de s’épingérer à 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 pour 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 que cette mémoire tampon a un horodatage valide associé à celui-ci.
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 dans une liste d’en-têtes pour la demande de flux donnée. Pendant une demande de lecture, toute autre E/S reste 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 dans l’opération d’écriture.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Spécifie que le membre données 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 est capturer directement vers 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 pendant la capture WVDDM (modèle de pilote d’affichage Windows Vista). Si cet indicateur n’est pas défini, KS utilise des E/S directes dans la mémoire tampon données.

Reserved

Réservé à une utilisation interne.

Remarques

Cette structure peut être suivie en mémoire par des 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 heure est basé sur le format de données. Vous pouvez normaliser le temps de présentation à l’aide d’une fraction de mise à l’échelle du 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 en tant que décalage d’octet 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, les parties de l’en-tête de flux sont renseignées 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 taille de(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. Cela est inférieur ou égal au total de toutes 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.

Exigences

Exigence Valeur
d’en-tête ks.h (include Ks.h)

Voir aussi

KSDATAFORMAT