Interlacement 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 afficher correctement la vidéo entrelacée, les informations suivantes sont nécessaires :
Progressive ou entrelacée. Un flux vidéo peut contenir des images progressives, des images entrelacées ou un mélange des deux.
Domination du champ. La domination des champs 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 l’extraction 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 seul champ, la hauteur de l’échantillon est égale à la moitié de la hauteur du cadre, car l’échantillon ne contient que la moitié des lignes d’analyse d’un cadre. Les champs entrelacés sont recommandés, sauf si les caractéristiques du contenu source dictent autrement.
L’une de ces caractéristiques peut passer 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éinterlacage. Si la vidéo est entièrement progressive, d’autre part, l’EVR peut optimiser le pipeline de rendu. L’ajout d’une étape d’interlacement au pipeline augmente la latence de rendu.
Les informations sur l’interlacement sont stockées à deux emplacements :
Les informations générales sur l’interlacement dans un flux sont placées dans le type de média. Pour plus d’informations sur les types de supports, consultez types de supports.
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.
Interlacer les informations dans le type de média
L’attribut MF_MT_INTERLACE_MODE sur le type de média décrit comment 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 images 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 les valeurs supérieures et inférieures, il n’est pas important que ces deux valeurs soient utilisées. Si le format contient uniquement des champs supérieurs ou simplement des champs inférieurs, définissez la valeur correspondant au contenu.
- Si le flux contient un mélange d’images entrelacées et progressives, ou si la domination du 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é? | Échantillons | Premier champ |
---|---|---|---|
MFVideoInterlace_Progressive | Non | Cadre progressif | Sans objet |
MFVideoInterlace_FieldInterleavedUpperFirst | Oui | Champs entrelacés | Premier supérieur |
MFVideoInterlace_FieldInterleavedLowerFirst | Oui | Champs entrelacés | Premier inférieur |
MFVideoInterlace_FieldSingleUpper | Oui | Champ unique | Premier supérieur |
MFVideoInterlace_FieldSingleLower | Oui | Champ unique | Premier inférieur |
MFVideoInterlace_MixedInterlaceOrProgressive | Peut varier | Champs entrelacés ou images 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 une modification de type multimédia.
Indicateurs d’interlace sur des exemples
Les informations pouvant passer d’un exemple à l’autre sont indiquées à l’aide d’exemples d’attributs. Utilisez l’interfaceIMFSample pour obtenir ou définir ces attributs.
Tous les attributs entrelacés répertoriés dans cette section ont des valeurs booléennes. En effet, chacun de ces attributs peut avoir trois valeurs : TRUE, FALSEou non défini. 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 multimédias ne sont pas valides.
Attribut | Description |
---|---|
MFSampleExtension_Interlaced | Si TRUE, le cadre est entrelacé. Si FAUX, le cadre 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 TRUE, le premier champ est répété. Si FALSE ou non défini, le premier champ n’est pas répété. |
MFSampleExtension_SingleField | Si TRUE, l’exemple contient un seul champ. Si FALSE, l’exemple contient des champs entrelacés. |
Le tableau suivant indique quels indicateurs sont requis, facultatifs ou interdits, en fonction du type de média.
Type de média | Indicateur entrelacé | BottomFieldFirst Flag | RepeatFirstField, indicateur | Indicateur SingleField |
---|---|---|---|---|
Progressif | Optionnel; si la valeur est définie, doit être FALSE. | Ne définissez pas. | Ne définissez pas. | Ne définissez pas. |
Champs entrelacés | Optionnel; si la valeur est définie, doit être TRUE. | Optionnel; s’il est défini, doit correspondre au type de média. | Ne définissez pas. | Optionnel; si la valeur est définie, doit être FALSE. |
Champs uniques | Optionnel; si la valeur est définie, doit être TRUE. | Obligatoire. | Ne définissez pas. | Défini sur TRUE. |
Mélangé | Obligatoire. | Obligatoire. | Obligatoire. | Optionnel; si la valeur est définie, doit être FALSE. |
Dans les cas où l’attribut est facultatif, le type de média définit déjà les informations. Il est valide pour définir l’attribut à mettre en correspondance, 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 les 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_RepeatFirstFieldou MFSampleExtension_SingleField.
- La vidéo est tous les champs entrelacés avec la même domination 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 ou définissez la valeur sur 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 domination 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_BottomFieldFirstet 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 se trouve dans 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 attributs d’exemple Media Foundation.
picture_structure
Valeur | Exemple d’attribut |
---|---|
cadre | MFSampleExtension_SingleField = FALSE |
top_field |
MFSampleExtension_SingleField = TRUE MFSampleExtension_BottomFieldFirst = FALSE |
bottom_field |
MFSampleExtension_SingleField = TRUE MFSampleExtension_BottomFieldFirst = TRUE |
progressive_frame
Valeur | Exemple d’attribut |
---|---|
0 | MFSampleExtension_Interlaced = TRUE |
1 | MFSampleExtension_Interlaced = FALSE |
top_field_first
Valeur | Exemple d’attribut |
---|---|
0 | MFSampleExtension_BottomFieldFirst = TRUE |
1 | MFSampleExtension_BottomFieldFirst = FALSE |
repeat_first_field
Valeur | Exemple d’attribut |
---|---|
0 | MFSampleExtension_RepeatFirstField = FALSE |
1 | MFSampleExtension_RepeatFirstField = TRUE |
exemples de 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’image entière. 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 de média décrit la vidéo comme 720 × 480, chaque champ contient 240 lignes d’analyse, et donc chaque mémoire tampon ne contient que 240 lignes de pixels. Si vous écrivez un composant qui accepte des types multimé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 (attributMF_MT_GEOMETRIC_APERTURE) et à l’ouverture d’affichage minimale (attributMF_MT_MINIMUM_DISPLAY_APERTURE). Ces régions sont spécifiées en termes d’image entière, et non des champs individuels.
Mappages DirectShow
Dans DirectShow, les informations d’interlacement par exemple sont contenues dans la dwTypeSpecificFlags membre de la structure AM_SAMPLE2_PROPERTIES. Le tableau suivant présente 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 = TRUE. MFSampleExtension_BottomFieldFirst = FALSE. |
AM_VIDEO_FLAG_FIELD2 |
MFSampleExtension_Interlaced = TRUE. MFSampleExtension_SingleField = TRUE. MFSampleExtension_BottomFieldFirst = TRUE. |
AM_VIDEO_FLAG_WEAVE | MFSampleExtension_Interlaced = FALSE. (Cet indicateur indique que le pilote ne doit pas déinterlacer 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 = TRUE. 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 à partir de la structure VIDEOINFOHEADER2 :
Indicateur d’interlace DirectShow | Exemple d’attribut Media Foundation |
---|---|
AMINTERLACE_IsInterlaced | MFSampleExtension_Interlaced = TRUE. |
AMINTERLACE_1FieldPerSample | MFSampleExtension_SingleField = TRUE. |
AMINTERLACE_Field1First | MFSampleExtension_BottomFieldFirst = FALSE. |
Rubriques connexes