Configurando a codificação de vídeo (Microsoft Media Foundation)
Para configurar o codificador de vídeo, execute as etapas a seguir:
Defina todas as propriedades no DMO do codificador usando IPropertyBag::Write. A lista a seguir resume o conjunto mínimo de propriedades necessárias para codificar um fluxo de vídeo CBR (todos esses valores têm padrões que podem ser usados):
- A propriedade MFPKEY_VIDEOWINDOW especifica a janela de buffer a ser usada para o fluxo. Para obter mais informações sobre a configuração de janelas de buffer e como ela afeta o conteúdo, consulte Métodos de codificação. A janela de buffer padrão é de três segundos, o que é apropriado para muitos cenários.
- A complexidade do vídeo é definida para determinar a compensação entre a qualidade do conteúdo codificado e o tempo necessário para codificar. Se você não definir um valor, será usado o valor padrão. No entanto, você pode encontrar os modos recomendados para um codec específico chamando IWMCodecProps::GetCodecProp para recuperar g_wszWMVCComplexityExLive, g_wszWMVCComplexityExOffline, and g_wszWMVCComplexityExMax. Em seguida, você pode definir MFPKEY_COMPLEXITYEX para um valor entre 0 e a complexidade máxima relatada.
- MFPKEY_CRISP especifica a importância relativa da suavidade do vídeo e a qualidade da imagem dos quadros codificados. Na maioria dos casos, o valor padrão funciona bem.
- Para conteúdo de vídeo armazenado em um contêiner diferente de ASF, a propriedade MFPKEY_ASFOVERHEADPERFRAME deve ser definida como 0. Esse não é o valor padrão.
Para obter informações sobre como configurar fluxos VBR, consulte Usando a codificação VBR.
Configure a estrutura DMO_MEDIA_TYPE para o tipo de entrada ou, se você estiver usando o SDK do Media Foundation, use a função MFInitMediaTypeFromVideoInfoHeader. Use uma estrutura VIDEOINFOHEADER que descreve o conteúdo de entrada descompactado. O codec não redimensiona o vídeo nem converte o espaço de cores.
Defina o tipo de entrada usando IMediaObject::SetInputType ou IMFTransform::SetInputType.
Configure o tipo de saída para o codificador. Depois que o tipo de entrada é definido, o codificador enumera os tipos de saída concluídos, exceto para o membro dwBitrate da estrutura VIDEOINFOHEADER ou o atributo MF_MT_AVG_BITRATE da interface IMFMediaType. Se você recuperar um tipo de saída antes de definir um tipo de entrada, a estrutura DMO_MEDIA_TYPE não terá VIDEOINFOHEADER associado.
Recupere os dados privados do codec e acrescente-os à estrutura VIDEOINFOHEADER que você passa para a estrutura DMO_MEDIA_TYPE ou para IMFMediaType. Para obter mais informações, consulte Usar dados privados de codec de vídeo.
Defina o tipo de saída chamando o método IMediaObject::SetOutputType ou IMFTransform::SetOutputType. Passe a estrutura DMO_MEDIA_TYPE com a estrutura concluída VIDEOINFOHEADER (incluindo dados privados anexados) referenciados no membro pbFormat ou construa IMFMediaType chamando MFInitMediaTypeFromVideoInfoHeader.
Observação
O objeto codificador de vídeo dá suporte a duas saídas. A segunda saída é para o codificador "pós-visualização". Ele fornece as amostras descompactadas como elas serão entregues pelo decodificador. Isso habilita que você monitore a qualidade da codificação sem ter que esperar até que todo o fluxo seja processado. Essa saída é opcional. Se você quiser usá-lo, configure seu tipo seguindo o mesmo processo usado para definir o tipo de entrada do codificador.