Compartir a través de


Conceptos básicos de DMO (Microsoft Media Foundation)

En este tema se proporciona una breve introducción a las DMV en relación con los códecs de Windows Media. Para obtener más información sobre las DPO, vea Objetos multimedia de DirectX.

Un DMO es un objeto COM que transforma los datos. Los datos se pasan a él y devuelven los datos transformados. En el caso de un codificador de códec DMO, se introducen datos multimedia sin comprimir y DMO entrega datos de medios comprimidos. La principal ventaja de usar DMO es que todos implementan la misma interfaz base, IMediaObject, que simplifica el trabajo con ellos porque se puede usar el mismo objeto, independientemente del tipo de transformación que se realiza.

Dado que hay variables implicadas en cualquier tipo de transformación de datos, la transformación de audio y vídeo debe tener en cuenta la amplia gama de configuraciones de medios posibles. Los códecs audio y vídeo de Windows Media también admiten una serie de características especiales que debes poder configurar mediante DMO.

En general, la información variable que necesitan los DPO del códec para comprimir y descomprimir medios digitales se transmite de una de estas tres maneras:

  • Establezca el tipo de entrada en el DMO para transmitir las características de los medios sin comprimir que se pasan a un DMO del codificador y las características de los medios comprimidos que se pasan a un DMO de descodificador.
  • Establezca el tipo de salida en el DMO para transmitir las características de los medios comprimidos que entrega un DMO del codificador y las características de los medios sin comprimir que entrega un DMO descodificador.
  • Con los métodos de la interfaz IPropertyBag , configure otras opciones que admitan las distintas características de las DMV del códec como propiedades. IPropertyBag es una interfaz COM estándar compatible con todas las DPO de códec.

Además, algunas características de códec se administran mediante otras interfaces específicas de las DPO del códec. Estas interfaces se enumeran para cada códec de la sección Objetos de códec.

Los tipos de entrada y salida son específicos de los flujos de entrada y salida. Cada secuencia representa una representación discreta del contenido. Por ejemplo, el codificador de vídeo de Windows Media DMO tiene un único flujo de entrada y dos flujos de salida. El flujo de entrada acepta muestras de vídeo sin comprimir. El primero de los dos flujos de salida entrega muestras comprimidas; el otro proporciona ejemplos sin comprimir. Las muestras individuales de un flujo de salida representan el mismo contenido que los ejemplos correspondientes en la otra secuencia, pero cada secuencia entrega esas muestras en un formato diferente.

Cada flujo (entrada o salida) admite uno o varios tipos de medios. Un tipo de medio, o formato, se describe mediante una estructura de DMO_MEDIA_TYPE . Puede consultar el DMO de los tipos admitidos por un flujo de salida mediante una llamada a IMediaObject::GetOutputType. Este método devuelve un tipo de salida válido (aunque en algunos casos parcialmente incompleto) para esa secuencia. Puede enumerar los tipos de medios admitidos para un flujo de salida realizando llamadas repetidas a GetOutputType, incrementando el parámetro de tipo con cada llamada. Cuando el índice de tipo que se pasa está fuera de los límites, el método devuelve DMO_E_NO_MORE_ITEMS. Los formatos de entrada se pueden enumerar de la misma manera mediante el método IMediaObject::GetInputType .

Los tipos enumerados por DMO son solo los tipos "preferidos", pero se pueden admitir otros tipos. Puede validar un tipo de salida llamando a IMediaObject::SetOutputType. Use IMediaObject::SetInputType para validar un tipo de entrada. Ambos métodos devolverán DMO_E_TYPE_NOT_ACCEPTED si la estructura de DMO_MEDIA_TYPE que pasó no es válida. Algunas DPO requieren que establezca un tipo de salida antes de enumerar los tipos de entrada. Todas las DPO de códec audio y vídeo de Windows Media tienen entradas y salidas que tienen validación interdependiente. Es decir, el tipo de salida que establezca establecerá los criterios de validación para el tipo de entrada. También hay algunas propiedades que, cuando se establecen, modifican los tipos de entrada y salida válidos. Por este motivo, debe establecer todas las propiedades deseadas en DMO antes de enumerar los tipos.

Cuando haya establecido los tipos de salida y entrada para DMO, puede empezar a procesar muestras. Cada muestra de entrada se pasa al códec mediante una llamada a IMediaObject::P rocessInput y cada muestra de salida se entrega mediante el códec al realizar una llamada a IMediaObject::P rocessOutput.

Trabajar con DPO de códec