Acerca de los tipos de medios (Microsoft Media Foundation)

Un tipo de medio describe el formato de una secuencia multimedia. En Microsoft Media Foundation, los tipos de medios se representan mediante la interfaz IMFMediaType . Esta interfaz hereda la interfaz IMFAttributes . Los detalles de un tipo de medio se especifican como atributos.

Para crear un nuevo tipo de medio, llame a la función MFCreateMediaType . Esta función devuelve un puntero a la interfaz IMFMediaType . El tipo de medio inicialmente no tiene atributos. Para establecer los detalles del formato, establezca los atributos pertinentes.

Para obtener una lista de atributos de tipo multimedia, vea Atributos de tipo multimedia.

Tipos principales y subtipos

Dos fragmentos importantes de información para cualquier tipo de medio son el tipo principal y el subtipo.

  • El tipo principal es un GUID que define la categoría general de los datos en una secuencia multimedia. Los tipos principales incluyen vídeo y audio. Para especificar el tipo principal, establezca el atributo MF_MT_MAJOR_TYPE . El método IMFMediaType::GetMajorType devuelve el valor de este atributo.
  • El subtipo define aún más el formato. Por ejemplo, dentro del tipo principal de vídeo, hay subtipos para RGB-24, RGB-32, YUY2, etc. Dentro del audio, hay audio PCM, audio de punto flotante IEEE y otros. El subtipo proporciona más información que el tipo principal, pero no define todo sobre el formato. Por ejemplo, los subtipos de vídeo no definen el tamaño de la imagen ni la velocidad de fotogramas. Para especificar el subtipo, establezca el atributo MF_MT_SUBTYPE .

Todos los tipos de medios deben tener un GUID de tipo principal y un GUID de subtipo. Para obtener una lista de guides de tipo principal y subtipo, consulte GUID de tipo multimedia.

¿Por qué atributos?

Los atributos tienen varias ventajas sobre las estructuras de formato que se han usado en tecnologías anteriores, como DirectShow y windows Media Format SDK.

  • Es más fácil representar los valores "no sabe" o "no importa". Por ejemplo, si está escribiendo una transformación de vídeo, es posible que sepa con antelación qué FORMATO RGB e YUV admite la transformación, pero no las dimensiones del fotograma de vídeo, hasta que las obtenga del origen de vídeo. Del mismo modo, es posible que no le interesen ciertos detalles, como las primarias del vídeo. Con una estructura de formato, todos los miembros deben rellenarse con algún valor. Como resultado, se ha vuelto común usar cero para indicar un valor desconocido o predeterminado. Esta práctica puede provocar errores si otro componente trata cero como un valor legítimo. Con los atributos, simplemente se omiten los atributos que son desconocidos o no relevantes para el componente.

  • A medida que los requisitos han cambiado con el tiempo, las estructuras de formato se ampliaron agregando datos adicionales al final de la estructura. Por ejemplo, WAVEFORMATEXTENSIBLE extiende la estructura WAVEFORMATEX . Esta práctica es propensa a errores, ya que los componentes deben convertir punteros de estructura a otros tipos de estructura. Los atributos se pueden ampliar de forma segura.

  • Se han definido estructuras de formato mutuamente incompatibles. Por ejemplo, DirectShow define las estructuras VIDEOINFOHEADER y VIDEOINFOHEADER2 . Los atributos se establecen de forma independiente entre sí, por lo que este problema no surge.

Atributos de tipo multimedia

Tipos de medios