Entrelacement vidéo
Cette rubrique décrit comment les sources multimédias et les décodeurs doivent gérer le contenu vidéo entrelacé.
Pour décoder et restituer correctement la vidéo entrelacée, les informations suivantes sont nécessaires :
Progressif ou entrelacé. Un flux vidéo peut contenir des images progressives, des images entrelacées ou une combinaison des deux.
Domination des champs. La dominance de champ décrit le champ qui apparaît en premier, le champ supérieur ou le champ inférieur.
Répétez le premier champ. Cet indicateur est utilisé dans la procédure de tirage 3:2, lorsque le cadre est progressif, mais que le flux est entrelacé. Dans ce contexte, le premier champ peut être le champ supérieur ou inférieur.
Champs entrelacés ou champ unique. Un exemple peut contenir un seul champ ou deux champs entrelacés. Si un échantillon contient un champ unique, la hauteur de l’échantillon est la moitié de la hauteur du cadre, car l’exemple ne contient que la moitié des lignes de balayage d’un frame. Les champs entrelacés sont recommandés, sauf si les caractéristiques du contenu source en imposent le contraire.
L’une de ces caractéristiques peut changer d’un échantillon à l’autre. Toutefois, les composants vidéo doivent savoir quelque chose sur le contenu global avant le début de la diffusion en continu. Par exemple, si la vidéo est entrelacée, le convertisseur vidéo amélioré (EVR) doit réserver de la mémoire vidéo pour le désinterlacement. Si la vidéo est entièrement progressive, en revanche, l’EVR peut optimiser le pipeline de rendu. L’ajout d’une étape de désinterlacation au pipeline augmente la latence de rendu.
Les informations sur l’entrelacement sont stockées à deux emplacements :
Les informations générales sur l’entrelacement dans un flux sont placées dans le type de média. Pour plus d’informations sur les types de médias, consultez Types de médias.
Les informations qui peuvent changer avec chaque échantillon sont placées sur l’exemple en tant qu’attribut. Pour plus d’informations sur les exemples, consultez Exemples multimédias.
Entrelacer les informations dans le type de média
L’attribut MF_MT_INTERLACE_MODE sur le type de média décrit la façon dont le flux dans son ensemble est entrelacé. La valeur de cet attribut est membre de l’énumération MFVideoInterlaceMode . Un type de média vidéo doit toujours avoir cet attribut.
- Si le flux contient uniquement des images progressives, sans trames entrelacées, utilisez MFVideoInterlace_Progressive.
- Si le flux contient uniquement des trames entrelacées et que chaque exemple contient deux champs entrelacés, utilisez MFVideoInterlace_FieldInterleavedUpperFirst ou MFVideoInterlace_FieldInterleavedLowerFirst.
- Si le flux contient uniquement des images entrelacées et que chaque exemple contient un champ unique, utilisez MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower. Si les champs alternent entre upper et lower, peu importe laquelle de ces deux valeurs est utilisée. Si le format contient uniquement des champs supérieurs ou inférieurs, définissez la valeur qui correspond au contenu.
- Si le flux contient un mélange d’images entrelacées et progressives, ou si la dominance de champ bascule, définissez le type de média sur MFVideoInterlace_MixedInterlaceOrProgressive. Utilisez des exemples d’attributs pour décrire chaque image.
Le tableau suivant récapitule cet attribut.
MF_MT_INTERLACE_MODE | Entrelacé? | Exemples | Premier champ |
---|---|---|---|
MFVideoInterlace_Progressive | Non | Cadre progressif | Non applicable |
MFVideoInterlace_FieldInterleavedUpperFirst | Oui | Champs entrelacés | Premier haut |
MFVideoInterlace_FieldInterleavedLowerFirst | Oui | Champs entrelacés | Inférieur en premier |
MFVideoInterlace_FieldSingleUpper | Oui | Champ unique | Premier haut |
MFVideoInterlace_FieldSingleLower | Oui | Champ unique | Inférieur en premier |
MFVideoInterlace_MixedInterlaceOrProgressive | Peut varier | Champs entrelacés ou trames progressives | Peut varier |
Les champs entrelacés et les champs uniques ne peuvent pas être mélangés. Le passage de l’un à l’autre nécessite un changement de type de média.
Indicateurs d’entrelacement sur les exemples
Les informations qui peuvent changer d’un échantillon à l’autre sont indiquées à l’aide d’attributs d’exemple. Utilisez l’interface IMFSample pour obtenir ou définir ces attributs.
Tous les attributs d’entrelacement répertoriés dans cette section ont des valeurs booléennes. En effet, chacun de ces attributs peut avoir trois valeurs : TRUE, FALSE ou non définie. Si aucun attribut n’est défini, la valeur est extraite du type de média. Si un attribut est défini, la valeur remplace le type de média. Certaines combinaisons d’indicateurs et de types de média ne sont pas valides.
Attribut | Description |
---|---|
MFSampleExtension_Interlaced | Si la valeur est TRUE, le cadre est entrelacé. Si la valeur est FALSE, le frame est progressif. Définissez cet attribut sur chaque exemple si le type de média est MFVideoInterlace_MixedInterlaceOrProgressive. |
MFSampleExtension_BottomFieldFirst | La signification de cet indicateur varie selon que les exemples contiennent des champs entrelacés ou des champs uniques.
|
MFSampleExtension_RepeatFirstField | Si la valeur est TRUE, le premier champ est répété. Si la valeur est FALSE ou n’est pas définie, le premier champ n’est pas répété. |
MFSampleExtension_SingleField | Si la valeur est TRUE, l’exemple contient un seul champ. Si la valeur est FALSE, l’exemple contient des champs entrelacés. |
Le tableau suivant indique les indicateurs obligatoires, facultatifs ou interdits, en fonction du type de média.
Type de support | Indicateur entrelacé | BottomFieldFirst Flag | RepeatFirstField, indicateur | Indicateur SingleField |
---|---|---|---|---|
Progressif | Optionnel; si défini, doit avoir la valeur FALSE. | Ne pas définir. | Ne pas définir. | Ne pas définir. |
Champs entrelacés | Optionnel; si défini, doit avoir la valeur TRUE. | Optionnel; si défini, doit correspondre au type de média. | Ne pas définir. | Optionnel; si défini, doit avoir la valeur FALSE. |
Champs uniques | Optionnel; si défini, doit avoir la valeur TRUE. | Obligatoire. | Ne pas définir. | Définissez sur TRUE. |
Mixte | Obligatoire. | Obligatoire. | Obligatoire. | Optionnel; si défini, doit avoir la valeur FALSE. |
Dans les cas où l’attribut est facultatif, le type de média définit déjà les informations. Il est valide de définir l’attribut pour qu’il corresponde, mais pas obligatoire.
Par exemple, si le type de média est MFVideoInterlace_Progressive, cela implique que toutes les images du flux sont progressives. Par conséquent, vous pouvez définir l’attribut MFSampleExtension_Interlaced sur FALSE ou laisser l’attribut non défini.
Recommandations
Cette section contient des recommandations pour différents types de contenu.
- La vidéo est toutes des images progressives.
Définissez le type de média sur MFVideoInterlace_Progressive.
Ne définissez pas l’attribut MFSampleExtension_Interlaced ou définissez-le sur FALSE sur chaque image.
Ne définissez pas les attributs MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstField ou MFSampleExtension_SingleField .
- La vidéo est tous des champs entrelacés avec la même dominance de champ. Les exemples contiennent des champs entrelacés.
Définissez le type de média sur MFVideoInterlace_FieldInterleavedUpperFirst ou MFVideoInterlace_FieldInterleavedLowerFirst.
Ne définissez pas l’attribut MFSampleExtension_Interlaced ou définissez-le sur TRUE sur chaque image.
Ne définissez pas l’attribut MFSampleExtension_BottomFieldFirst , ni la valeur de chaque image pour qu’elle corresponde au type de média.
Ne définissez pas l’attribut MFSampleExtension_RepeatFirstField ou définissez-le sur FALSE sur chaque image.
Ne définissez pas l’attribut MFSampleExtension_SingleField ou définissez-le sur FALSE sur chaque image.
- La vidéo contient un mélange d’images entrelacées et progressives, avec des champs répétés et une prédominance de champ variable (par exemple, vidéo DVD).
Définissez le type de média sur MFVideoInterlace_MixedInterlaceOrProgressive.
Sur chaque image, définissez les attributs MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirst et MFSampleExtension_RepeatFirstField .
Ne définissez pas l’attribut MFSampleExtension_SingleField ou définissez-le sur FALSE sur chaque image.
- La vidéo est entrelacée et les exemples contiennent des champs uniques.
Définissez le type de média sur MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower.
Sur chaque image, définissez l’attribut MFSampleExtension_BottomFieldFirst .
Ne définissez pas l’attribut MFSampleExtension_Interlaced ou définissez-le sur TRUE sur chaque image.
Ne définissez pas l’attribut MFSampleExtension_RepeatFirstField ou définissez-le sur FALSE sur chaque image.
Ne définissez pas l’attribut MFSampleExtension_SingleField ou définissez-le sur TRUE sur chaque image.
La plupart du contenu vidéo appartient à l’une de ces catégories.
Mappages MPEG-2
Pour le contenu MPEG-2, utilisez les mappages suivants pour convertir les indicateurs MPEG-2 en exemples d’attributs Media Foundation.
picture_structure
Valeur | Exemple d’attribut |
---|---|
frame | = MFSampleExtension_SingleField FAUX |
top_field |
= MFSampleExtension_SingleField VRAI = MFSampleExtension_BottomFieldFirst FAUX |
bottom_field |
= MFSampleExtension_SingleField VRAI = MFSampleExtension_BottomFieldFirst VRAI |
progressive_frame
Valeur | Exemple d’attribut |
---|---|
0 | = MFSampleExtension_Interlaced VRAI |
1 | = MFSampleExtension_Interlaced FAUX |
top_field_first
Valeur | Exemple d’attribut |
---|---|
0 | = MFSampleExtension_BottomFieldFirst VRAI |
1 | = MFSampleExtension_BottomFieldFirst FAUX |
repeat_first_field
Valeur | Exemple d’attribut |
---|---|
0 | = MFSampleExtension_RepeatFirstField FAUX |
1 | = MFSampleExtension_RepeatFirstField VRAI |
exemples Single-Field
Si le type de média est MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower, cela signifie que chaque exemple contient un seul champ. Toutefois, le type de média décrit l’ensemble de l’image. Par conséquent, chaque mémoire tampon contient seulement la moitié du nombre de lignes de champ indiquées dans le type de média. Par exemple, si le type multimédia décrit la vidéo comme 720 × 480, chaque champ contient 240 lignes d’analyse et, par conséquent, chaque mémoire tampon contient seulement 240 lignes de pixels. Si vous écrivez un composant qui accepte les types de médias avec des exemples à champ unique, vous devez tenir compte de ce fait lorsque vous accédez aux données dans la mémoire tampon.
La même règle s’applique à l’ouverture géométrique (attribut MF_MT_GEOMETRIC_APERTURE ) et à l’ouverture d’affichage minimale (attribut MF_MT_MINIMUM_DISPLAY_APERTURE ). Ces régions sont spécifiées en termes d’image entière, et non de champs individuels.
Mappages directShow
Dans DirectShow, les informations d’entrelacement par exemple sont contenues dans le membre dwTypeSpecificFlags de la structure AM_SAMPLE2_PROPERTIES . Le tableau suivant montre les attributs équivalents pour Media Foundation.
Exemple d’indicateur DirectShow | Exemple d’attribut Media Foundation |
---|---|
AM_VIDEO_FLAG_INTERLEAVED_FRAME | = MFSampleExtension_SingleField FALSE. |
AM_VIDEO_FLAG_FIELD1 |
= MFSampleExtension_Interlaced TRUE. = MFSampleExtension_SingleField VRAI. = MFSampleExtension_BottomFieldFirst FALSE. |
AM_VIDEO_FLAG_FIELD2 |
= MFSampleExtension_Interlaced VRAI. = MFSampleExtension_SingleField VRAI. = MFSampleExtension_BottomFieldFirst VRAI. |
AM_VIDEO_FLAG_WEAVE | = MFSampleExtension_Interlaced FALSE. (Cet indicateur indique que le pilote ne doit pas désinterlacer les deux champs.) |
AM_VIDEO_FLAG_FIELD1FIRST | = MFSampleExtension_BottomFieldFirst FALSE. Si le contenu est entrelacé et que l’indicateur AM_VIDEO_FLAG_FIELD1FIRST n’est pas présent, définissez cet attribut sur TRUE. |
AM_VIDEO_FLAG_REPEAT_FIELD | = MFSampleExtension_RepeatFirstField VRAI. Si l’indicateur AM_VIDEO_FLAG_REPEAT_FIELD n’est pas présent, définissez cet attribut sur FALSE. |
Si l’exemple DirectShow ne contient pas d’indicateurs d’exemple, utilisez la valeur de dwInterlaceFlags de la structure VIDEOINFOHEADER2 :
Indicateur d’entrelacement DirectShow | Exemple d’attribut Media Foundation |
---|---|
AMINTERLACE_IsInterlaced | = MFSampleExtension_Interlaced VRAI. |
AMINTERLACE_1FieldPerSample | = MFSampleExtension_SingleField VRAI. |
AMINTERLACE_Field1First | = MFSampleExtension_BottomFieldFirst FALSE. |
Rubriques connexes