Compartilhar via


Interlacing de vídeo

Este tópico descreve como fontes de mídia e decodificadores devem lidar com conteúdo de vídeo entrelaçado.

Para decodificar e renderizar o vídeo entrelaçado corretamente, as seguintes informações são necessárias:

  • Progressivo ou entrelaçado. Um fluxo de vídeo pode conter quadros progressivos, quadros entrelaçados ou uma mistura de ambos.

  • Domínio de campo. A dominância de campo descreve qual campo aparece primeiro, o campo superior ou o campo inferior.

  • Repita o primeiro campo. Esse sinalizador é usado no pulldown 3:2, quando o quadro é progressivo, mas o fluxo é entrelaçado. Nesse contexto, o primeiro campo pode ser o campo superior ou inferior.

  • Campos intercalados ou campo único. Um exemplo pode conter um único campo ou dois campos intercalados. Se um exemplo contiver um único campo, a altura da amostra será metade da altura do quadro, pois o exemplo contém apenas metade das linhas de verificação de um quadro. Campos intercalados são recomendados, a menos que as características do conteúdo de origem determinem o contrário.

Qualquer uma dessas características pode mudar de um exemplo para o outro. No entanto, os componentes de vídeo precisam saber algo sobre o conteúdo geral antes do início do streaming. Por exemplo, se o vídeo estiver entrelaçado, o EVR (renderizador de vídeo avançado) precisará reservar memória de vídeo para a desinterlação. Se o vídeo for quadros totalmente progressivos, por outro lado, o EVR poderá otimizar o pipeline de renderização. Adicionar uma etapa de desinterlação ao pipeline aumenta a latência de renderização.

Informações sobre interlacing são armazenadas em dois locais:

  • Informações gerais sobre a interlacção em um fluxo são colocadas no tipo de mídia. Para obter mais informações sobre tipos de mídia, consulte tipos de mídia.

  • As informações que podem ser alteradas com cada exemplo são colocadas no exemplo como um atributo. Para obter mais informações sobre exemplos, consulte Exemplos de Mídia.

Informações de entrelaçamento no tipo de mídia

O atributo MF_MT_INTERLACE_MODE no tipo de mídia descreve como o fluxo como um todo é entrelaçado. O valor desse atributo é um membro da enumeração MFVideoInterlaceMode. Um tipo de mídia de vídeo sempre deve ter esse atributo.

  • Se o fluxo contiver apenas quadros progressivos, sem quadros entrelaçados, use MFVideoInterlace_Progressive.
  • Se o fluxo contiver apenas quadros entrelaçados e cada exemplo contiver dois campos intercalados, use MFVideoInterlace_FieldInterleavedUpperFirst ou MFVideoInterlace_FieldInterleavedLowerFirst.
  • Se o fluxo contiver apenas quadros entrelaçados e cada exemplo contiver um único campo, use MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower. Se os campos alternarem entre superior e inferior, não importa quais desses dois valores serão usados. Se o formato contiver apenas campos superiores ou apenas campos inferiores, defina o valor que corresponde ao conteúdo.
  • Se o fluxo contiver uma combinação de quadros entrelaçados e progressivos ou se o domínio do campo mudar, defina o tipo de mídia como MFVideoInterlace_MixedInterlaceOrProgressive. Use atributos de exemplo para descrever cada quadro.

A tabela a seguir resume esse atributo.

MF_MT_INTERLACE_MODE Entrelaçado? Amostras Primeiro campo
MFVideoInterlace_Progressive Não Quadro progressivo Não aplicável
MFVideoInterlace_FieldInterleavedUpperFirst Sim Campos intercalados Primeiro superior
MFVideoInterlace_FieldInterleavedLowerFirst Sim Campos intercalados Primeiro, mais baixo
MFVideoInterlace_FieldSingleUpper Sim Campo único Primeiro superior
MFVideoInterlace_FieldSingleLower Sim Campo único Primeiro, mais baixo
MFVideoInterlace_MixedInterlaceOrProgressive Pode variar Campos intercalados ou quadros progressivos Pode variar

 

Campos intercalados e campos únicos não podem ser misturados. Alternar de um para outro requer uma alteração de tipo de mídia.

Sinalizadores de entrelaçamento em exemplos

As informações que podem ser alteradas de um exemplo para o outro são indicadas usando atributos de exemplo. Use a interfaceIMFSample para obter ou definir esses atributos.

Todos os atributos de interlacção listados nesta seção têm valores boolianos. Efetivamente, cada um desses atributos pode ter três valores: VERDADEIRO, FALSE ou não definido. Se um atributo não for definido, o valor será obtido do tipo de mídia. Se um atributo for definido, o valor substituirá o tipo de mídia. Algumas combinações de sinalizadores e tipos de mídia não são válidas.

Atributo Descrição
MFSampleExtension_Interlaced Se VERDADEIRO, o quadro será entrelaçado. Se FALSE, o quadro será progressivo.
Defina esse atributo em cada exemplo se o tipo de mídia for MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_BottomFieldFirst O significado desse sinalizador depende se os exemplos contêm campos intercalados ou campos únicos.
  • Campos intercalados: se VERDADEIRO, o campo inferior será o primeiro. Se FALSE, o campo superior será o primeiro.
  • Campos únicos: se TRUE, o exemplo conterá um campo inferior. Se FALSE, o exemplo conterá um campo superior.
Defina esse atributo em cada exemplo de entrelaçamento se o tipo de mídia for MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower ou MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_RepeatFirstField Se TRUE, o primeiro campo será repetido. Se false ou não definido, o primeiro campo não será repetido.
MFSampleExtension_SingleField Se TRUE, o exemplo conterá um único campo. Se FALSE, o exemplo conterá campos intercalados.

 

A tabela a seguir mostra quais sinalizadores são necessários, opcionais ou proibidos, com base no tipo de mídia.

Tipo de mídia Sinalizador entrelaçado Sinalizador BottomFieldFirst Sinalizador RepeatFirstField Sinalizador SingleField
Progressivo Opcional; se definido, deve ser FALSE. Não definir. Não definir. Não definir.
Campos intercalados Opcional; se definido, deve ser VERDADEIRO. Opcional; se definido, deve corresponder ao tipo de mídia. Não definir. Opcional; se definido, deve ser FALSE.
Campos únicos Opcional; se definido, deve ser VERDADEIRO. Necessário. Não definir. Definido como TRUE.
Misturado Necessário. Necessário. Necessário. Opcional; se definido, deve ser FALSE.

 

Nos casos em que o atributo é opcional, o tipo de mídia já define as informações. É válido definir o atributo como correspondente, mas não é necessário.

Por exemplo, se o tipo de mídia for MFVideoInterlace_Progressive, isso implicará que todos os quadros no fluxo serão progressivos. Portanto, você pode definir o atributo MFSampleExtension_Interlaced como FALSE ou deixar o atributo não definido.

Recomendações

Esta seção contém recomendações para vários tipos de conteúdo.

  1. O vídeo é todo quadros progressivos.
  • Defina o tipo de mídia como MFVideoInterlace_Progressive.

  • Não defina o atributo MFSampleExtension_Interlaced ou defina-o como FALSE em cada quadro.

  • Não defina os atributos MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstFieldou MFSampleExtension_SingleField.

  1. O vídeo é todos campos entrelaçados com o mesmo domínio de campo. Os exemplos contêm campos intercalados.
  • Defina o tipo de mídia como MFVideoInterlace_FieldInterleavedUpperFirst ou MFVideoInterlace_FieldInterleavedLowerFirst.

  • Não defina o atributo MFSampleExtension_Interlaced ou defina-o como TRUE em cada quadro.

  • Não defina o atributo MFSampleExtension_BottomFieldFirst ou defina o valor em cada quadro para corresponder ao tipo de mídia.

  • Não defina o atributo MFSampleExtension_RepeatFirstField ou defina-o como FALSE em cada quadro.

  • Não defina o atributo MFSampleExtension_SingleField ou defina-o como FALSE em cada quadro.

  1. O vídeo contém uma mistura de quadros entrelaçados e progressivos, com campos repetidos e domínio de campo variável (por exemplo, vídeo de DVD).
  • Defina o tipo de mídia como MFVideoInterlace_MixedInterlaceOrProgressive.

  • Em cada quadro, defina os atributos MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirste MFSampleExtension_RepeatFirstField.

  • Não defina o atributo MFSampleExtension_SingleField ou defina-o como FALSE em cada quadro.

  1. O vídeo é entrelaçado e os exemplos contêm campos únicos.
  • Defina o tipo de mídia como MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower.

  • Em cada quadro, defina o atributo MFSampleExtension_BottomFieldFirst.

  • Não defina o atributo MFSampleExtension_Interlaced ou defina-o como TRUE em cada quadro.

  • Não defina o atributo MFSampleExtension_RepeatFirstField ou defina-o como FALSE em cada quadro.

  • Não defina o atributo MFSampleExtension_SingleField ou defina-o como TRUE em cada quadro.

A maioria do conteúdo de vídeo se enquadra em uma dessas categorias.

Mapeamentos mpeg-2

Para conteúdo MPEG-2, use os mapeamentos a seguir para converter os sinalizadores MPEG-2 em atributos de exemplo do Media Foundation.

picture_structure

Valor Atributo de exemplo
moldura MFSampleExtension_SingleField = FALSE
top_field MFSampleExtension_SingleField = verdadeiro
MFSampleExtension_BottomFieldFirst = FALSE
bottom_field MFSampleExtension_SingleField = verdadeiro
MFSampleExtension_BottomFieldFirst = VERDADEIRO

 

progressive_frame

Valor Atributo de exemplo
0 MFSampleExtension_Interlaced = VERDADEIRO
1 MFSampleExtension_Interlaced = FALSE

 

top_field_first

Valor Atributo de exemplo
0 MFSampleExtension_BottomFieldFirst = VERDADEIRO
1 MFSampleExtension_BottomFieldFirst = FALSE

 

repeat_first_field

Valor Atributo de exemplo
0 MFSampleExtension_RepeatFirstField = falso
1 MFSampleExtension_RepeatFirstField = verdadeiro

 

Exemplos de Single-Field

Se o tipo de mídia for MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower, isso significa que cada exemplo contém um único campo. No entanto, o tipo de mídia descreve todo o quadro. Portanto, cada buffer contém apenas metade do número de linhas de campo fornecidas no tipo de mídia. Por exemplo, se o tipo de mídia descreve o vídeo como 720 × 480, cada campo contém 240 linhas de verificação e, portanto, cada buffer contém apenas 240 linhas de pixels. Se você escrever um componente que aceita tipos de mídia com exemplos de campo único, deverá levar esse fato em conta ao acessar os dados no buffer.

A mesma regra se aplica à abertura geométrica (atributoMF_MT_GEOMETRIC_APERTURE) e à abertura de exibição mínima (MF_MT_MINIMUM_DISPLAY_APERTURE atributo). Essas regiões são especificadas em termos do quadro inteiro, não dos campos individuais.

Mapeamentos do DirectShow

No DirectShow, as informações de interlacção por exemplo estão contidas no dwTypeSpecificFlags membro da estrutura AM_SAMPLE2_PROPERTIES. A tabela a seguir mostra os atributos equivalentes para o Media Foundation.

Sinalizador de exemplo do DirectShow Atributo de exemplo do Media Foundation
AM_VIDEO_FLAG_INTERLEAVED_FRAME MFSampleExtension_SingleField = FALSE .
AM_VIDEO_FLAG_FIELD1 MFSampleExtension_Interlaced = VERDADEIRO.
MFSampleExtension_SingleField = VERDADEIRO.
MFSampleExtension_BottomFieldFirst = falso.
AM_VIDEO_FLAG_FIELD2 MFSampleExtension_Interlaced = VERDADEIRO.
MFSampleExtension_SingleField = VERDADEIRO.
MFSampleExtension_BottomFieldFirst = VERDADEIRO.
AM_VIDEO_FLAG_WEAVE MFSampleExtension_Interlaced = falso. (Esse sinalizador indica que o driver não deve desinterlacear os dois campos.)
AM_VIDEO_FLAG_FIELD1FIRST MFSampleExtension_BottomFieldFirst = falso. Se o conteúdo estiver entrelaçado e o sinalizador de AM_VIDEO_FLAG_FIELD1FIRST não estiver presente, defina esse atributo como VERDADEIRO.
AM_VIDEO_FLAG_REPEAT_FIELD MFSampleExtension_RepeatFirstField = VERDADEIRO. Se o sinalizador de AM_VIDEO_FLAG_REPEAT_FIELD não estiver presente, defina esse atributo como false.

 

Se o exemplo directShow não contiver sinalizadores de exemplo, use o valor de dwInterlaceFlags da estrutura VIDEOINFOHEADER2:

Sinalizador de entrelaçamento do DirectShow Atributo de exemplo do Media Foundation
AMINTERLACE_IsInterlaced MFSampleExtension_Interlaced = VERDADEIRO.
AMINTERLACE_1FieldPerSample MFSampleExtension_SingleField = VERDADEIRO.
AMINTERLACE_Field1First MFSampleExtension_BottomFieldFirst = falso.

 

tipos de mídia de vídeo

tipos de mídia