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

Obtém um tipo de mídia disponível para um fluxo de saída nesta MFT (transformação do Media Foundation).

Sintaxe

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

Parâmetros

[in] dwOutputStreamID

Identificador de fluxo de saída. Para obter a lista de identificadores de fluxo, chame IMFTransform::GetStreamIDs.

[in] dwTypeIndex

Índice do tipo de mídia a ser recuperado. Os tipos de mídia são indexados de zero e retornados em ordem aproximada de preferência.

[out] ppType

Recebe um ponteiro para a interface IMFMediaType . O chamador deve liberar a interface.

Retornar valor

O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Código de retorno Descrição
S_OK
O método foi bem-sucedido.
E_NOTIMPL
O MFT não tem uma lista de tipos de saída disponíveis.
MF_E_INVALIDSTREAMNUMBER
Identificador de fluxo inválido.
MF_E_NO_MORE_TYPES
O parâmetro dwTypeIndex está fora do intervalo.
MF_E_TRANSFORM_TYPE_NOT_SET
Você deve definir os tipos de entrada antes de definir os tipos de saída.

Comentários

O MFT define uma lista de tipos de mídia disponíveis para cada fluxo de saída e os ordena por preferência. Esse método enumera os tipos de mídia disponíveis para um fluxo de saída. Para enumerar os tipos disponíveis, incremente dwTypeIndex até que o método retorne MF_E_NO_MORE_TYPES.

Definir o tipo de mídia em um fluxo pode alterar os tipos disponíveis para outro fluxo (ou alterar a ordem de preferência). No entanto, um MFT não é necessário para atualizar a lista de tipos disponíveis dinamicamente. A única maneira garantida de testar se você pode definir um tipo de entrada específico é chamar IMFTransform::SetOutputType.

Em alguns casos, um MFT não pode retornar uma lista de tipos de saída até que um ou mais tipos de entrada sejam definidos. Nesse caso, o método retorna MF_E_TRANSFORM_TYPE_NOT_SET.

Um MFT não é necessário para implementar esse método. No entanto, a maioria dos MFTs deve implementar esse método, a menos que os tipos com suporte sejam simples e possam ser descobertos por meio da função MFTGetInfo .

Esse método pode retornar um tipo de mídia parcial . Um tipo de mídia parcial contém uma descrição incompleta de um formato e é usado para fornecer uma dica ao chamador. Por exemplo, um tipo parcial pode incluir apenas o tipo principal e os GUIDs de subtipo. No entanto, depois que o cliente define os tipos de entrada no MFT, o MFT geralmente deve retornar pelo menos um tipo de saída completo, que pode ser usado sem modificação adicional. Para obter mais informações, consulte Tipos de mídia completos e parciais.

Alguns MFTs não podem fornecer uma lista precisa de tipos de saída até que o MFT receba o primeiro exemplo de entrada. Por exemplo, o MFT pode precisar ler o primeiro cabeçalho de pacote para deduzir o formato. Um MFT deve lidar com essa situação da seguinte maneira:

  1. Antes que o MFT receba qualquer entrada, ele oferece uma lista de um ou mais tipos de saída que ele poderia produzir. Por exemplo, um decodificador MPEG-2 pode retornar um tipo de mídia que descreve o nível de perfil/main de main MPEG-2.
  2. O cliente seleciona um desses tipos (geralmente o primeiro) e o define no fluxo de saída.
  3. O cliente fornece o primeiro exemplo de entrada chamando IMFTransform::P rocessInput.
  4. Se o tipo de saída não estiver em conformidade com os dados de entrada, a transformação sinalizará uma alteração de formato no método ProcessOutput . Para obter mais informações sobre alterações de formato, consulte IMFTransform::P rocessOutput.
  5. As chamadas GetOutputAvailableType novamente. Neste ponto, o método deve retornar uma lista atualizada de tipos que refletem os dados de entrada.
  6. O cliente seleciona um novo tipo de saída nessa lista e chama SetOutputType.
Se MFT_UNIQUE_METHOD_NAMES for definido antes de incluir mftransform.h, esse método será renomeado como MFTGetOutputAvailableType. Consulte Criando objetos DMO/MFT híbridos.

Notas de implementação

Se o MFT armazenar um tipo de mídia internamente, o MFT deverá retornar um clone do tipo de mídia, não um ponteiro para o tipo original. Caso contrário, o chamador poderá modificar o tipo e alterar o estado interno do MFT.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho mftransform.h
Biblioteca Mfuuid.lib

Confira também

IMFTransform

Transformações do Media Foundation