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.
  • Champs entrelacés : si la valeur EST TRUE, le champ inférieur est en premier. Si la valeur est FALSE, le champ supérieur est en premier.
  • Champs uniques : si la valeur est TRUE, l’exemple contient un champ inférieur. Si la valeur est FALSE, l’exemple contient un champ supérieur.
Définissez cet attribut sur chaque exemple d’entrelacement si le type de média est MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower ou MFVideoInterlace_MixedInterlaceOrProgressive.
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.

  1. 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 .

  1. 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.

  1. 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.

  1. 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.

 

Types de médias vidéo

Types de média