À propos des types de médias (Microsoft Media Foundation)
Un type de média décrit le format d’un flux multimédia. Dans Microsoft Media Foundation, les types de médias sont représentés par l’interface IMFMediaType . Cette interface hérite de l’interface IMFAttributes . Les détails d’un type de média sont spécifiés en tant qu’attributs.
Pour créer un type de média, appelez la fonction MFCreateMediaType . Cette fonction retourne un pointeur vers l’interface IMFMediaType . Le type de média n’a initialement aucun attribut. Pour définir les détails du format, définissez les attributs appropriés.
Pour obtenir la liste des attributs de type multimédia, consultez Attributs de type de média.
Principaux types et sous-types
Deux informations importantes pour n’importe quel type de média sont le type principal et le sous-type.
- Le type principal est un GUID qui définit la catégorie globale des données dans un flux multimédia. Les principaux types incluent la vidéo et l’audio. Pour spécifier le type principal, définissez l’attribut MF_MT_MAJOR_TYPE . La méthode IMFMediaType::GetMajorType retourne la valeur de cet attribut.
- Le sous-type définit davantage le format. Par exemple, dans le type principal de vidéo, il existe des sous-types pour RVB-24, RVB-32, YUY2, etc. Dans l’audio, il y a l’audio PCM, l’audio à virgule flottante IEEE et d’autres. Le sous-type fournit plus d’informations que le type principal, mais il ne définit pas tout sur le format. Par exemple, les sous-types vidéo ne définissent pas la taille de l’image ou la fréquence d’images. Pour spécifier le sous-type, définissez l’attribut MF_MT_SUBTYPE .
Tous les types de médias doivent avoir un GUID de type principal et un GUID de sous-type. Pour obtenir la liste des GUID de type et de sous-type principaux, consultez GUID de type multimédia.
Pourquoi attributs ?
Les attributs présentent plusieurs avantages par rapport aux structures de format qui ont été utilisées dans des technologies antérieures telles que DirectShow et le Kit de développement logiciel (SDK) au format Windows Media.
Il est plus facile de représenter les valeurs « ne sait pas » ou « don’t care ». Par exemple, si vous écrivez une transformation vidéo, vous pouvez savoir à l’avance quels formats RVB et YUV la transformation prend en charge, mais pas les dimensions de l’image vidéo, jusqu’à ce que vous les obteniez à partir de la source vidéo. De même, vous ne vous souciez peut-être pas de certains détails, comme les primaires vidéo. Avec une structure de format, chaque membre doit être rempli avec une valeur. Par conséquent, il est devenu courant d’utiliser zéro pour indiquer une valeur inconnue ou par défaut. Cette pratique peut provoquer des erreurs si un autre composant traite zéro comme valeur légitime. Avec les attributs, vous omettez simplement les attributs inconnus ou non pertinents pour votre composant.
Comme les exigences ont changé au fil du temps, les structures de format ont été étendues en ajoutant des données supplémentaires à la fin de la structure. Par exemple, WAVEFORMATEXTENSIBLE étend la structure WAVEFORMATEX . Cette pratique est sujette à des erreurs, car les composants doivent caster les pointeurs de structure vers d’autres types de structure. Les attributs peuvent être étendus en toute sécurité.
Des structures de format mutuellement incompatibles ont été définies. Par exemple, DirectShow définit les structures VIDEOINFOHEADER et VIDEOINFOHEADER2 . Les attributs étant définis indépendamment les uns des autres, ce problème ne se pose pas.
Rubriques connexes