Método IMFTransform::GetOutputAvailableType (mftransform.h)

Obtiene un tipo de medio disponible para un flujo de salida en esta transformación de Media Foundation (MFT).

Sintaxis

HRESULT GetOutputAvailableType(
  [in]  DWORD        dwOutputStreamID,
  [in]  DWORD        dwTypeIndex,
  [out] IMFMediaType **ppType
);

Parámetros

[in] dwOutputStreamID

Identificador de flujo de salida. Para obtener la lista de identificadores de flujo, llame a IMFTransform::GetStreamIDs.

[in] dwTypeIndex

Índice del tipo de medio que se va a recuperar. Los tipos de medios se indexan desde cero y se devuelven en orden aproximado de preferencia.

[out] ppType

Recibe un puntero a la interfaz IMFMediaType . El autor de la llamada debe liberar la interfaz .

Valor devuelto

El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código devuelto Descripción
S_OK
El método se ha llevado a cabo de forma correcta.
E_NOTIMPL
MFT no tiene una lista de tipos de salida disponibles.
MF_E_INVALIDSTREAMNUMBER
Identificador de flujo no válido.
MF_E_NO_MORE_TYPES
El parámetro dwTypeIndex está fuera del intervalo.
MF_E_TRANSFORM_TYPE_NOT_SET
Debe establecer los tipos de entrada antes de establecer los tipos de salida.

Comentarios

MFT define una lista de tipos de medios disponibles para cada flujo de salida y los ordena por preferencia. Este método enumera los tipos de medios disponibles para un flujo de salida. Para enumerar los tipos disponibles, incremente dwTypeIndex hasta que el método devuelva MF_E_NO_MORE_TYPES.

Establecer el tipo de medio en una secuencia puede cambiar los tipos disponibles para otra secuencia (o cambiar el orden de preferencia). Sin embargo, no es necesario un MFT para actualizar la lista de tipos disponibles dinámicamente. La única manera garantizada de probar si puede establecer un tipo de entrada determinado es llamar a IMFTransform::SetOutputType.

En algunos casos, un MFT no puede devolver una lista de tipos de salida hasta que se establezcan uno o varios tipos de entrada. Si es así, el método devuelve MF_E_TRANSFORM_TYPE_NOT_SET.

No se requiere MFT para implementar este método. Sin embargo, la mayoría de las MFP deben implementar este método, a menos que los tipos admitidos sean simples y se puedan detectar a través de la función MFTGetInfo .

Este método puede devolver un tipo de medio parcial . Un tipo de medio parcial contiene una descripción incompleta de un formato y se usa para proporcionar una sugerencia al autor de la llamada. Por ejemplo, un tipo parcial podría incluir solo los GUID de tipo principal y subtipo. Sin embargo, después de que el cliente establezca los tipos de entrada en MFT, el MFT generalmente debe devolver al menos un tipo de salida completo, que se puede usar sin realizar ninguna modificación adicional. Para obtener más información, vea Tipos de medios completos y parciales.

Algunas MFP no pueden proporcionar una lista precisa de los tipos de salida hasta que MFT reciba la primera muestra de entrada. Por ejemplo, el MFT podría necesitar leer el primer encabezado de paquete para deducir el formato. Un MFT debe controlar esta situación de la siguiente manera:

  1. Antes de que MFT reciba cualquier entrada, ofrece una lista de uno o varios tipos de salida que podría producir. Por ejemplo, un descodificador MPEG-2 podría devolver un tipo multimedia que describa el nivel de perfil principal/principal MPEG-2.
  2. El cliente selecciona uno de estos tipos (generalmente el primero) y lo establece en el flujo de salida.
  3. El cliente entrega la primera muestra de entrada llamando a IMFTransform::P rocessInput.
  4. Si el tipo de salida no se ajusta a los datos de entrada, la transformación indica un cambio de formato en el método ProcessOutput . Para obtener más información sobre los cambios de formato, vea IMFTransform::P rocessOutput.
  5. Llama a GetOutputAvailableType de nuevo. En este punto, el método debe devolver una lista actualizada de tipos que refleje los datos de entrada.
  6. El cliente selecciona un nuevo tipo de salida de esta lista y llama a SetOutputType.
Si MFT_UNIQUE_METHOD_NAMES se define antes de incluir mftransform.h, se cambia el nombre de este método a MFTGetOutputAvailableType. Consulte Creación de objetos DMO/MFT híbridos.

Notas de implementación

Si el MFT almacena un tipo de medio internamente, MFT debe devolver un clon del tipo de medio, no un puntero al tipo original. De lo contrario, el autor de la llamada podría modificar el tipo y modificar el estado interno del MFT.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado mftransform.h
Library Mfuuid.lib

Consulte también

IMFTransform

Transformaciones de Media Foundation