Interlacing de vídeo

Este tópico descreve como fontes de mídia e decodificadores devem lidar com o 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 está 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 a amostra 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 ditem 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 streaming começar. Por exemplo, se o vídeo estiver entrelaçado, o renderizador de vídeo avançado (EVR) precisará reservar memória de vídeo para a desinterlacagem. Se o vídeo for totalmente progressivo, por outro lado, o EVR poderá otimizar o pipeline de renderização. Adicionar uma etapa de desinterlacing ao pipeline aumenta a latência de renderização.

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

  • Informações gerais sobre a interlacagem 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 deve sempre 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 amostra contiver dois campos intercalados, use MFVideoInterlace_FieldInterleavedUpperFirst ou MFVideoInterlace_FieldInterleavedLowerFirst.
  • Se o fluxo contiver apenas quadros entrelaçados e cada amostra contiver um único campo, use MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower. Se os campos alternarem entre superior e inferior, não importa qual desses dois valores seja usado. 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? Exemplos Primeiro campo
MFVideoInterlace_Progressive Não Quadro progressivo Não aplicável
MFVideoInterlace_FieldInterleavedUpperFirst Sim Campos intercalados Superior primeiro
MFVideoInterlace_FieldInterleavedLowerFirst Sim Campos intercalados Baixar primeiro
MFVideoInterlace_FieldSingleUpper Sim Campo único Superior primeiro
MFVideoInterlace_FieldSingleLower Sim Campo único Baixar primeiro
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 próximo são indicadas usando atributos de exemplo. Use a interface IMFSample para obter ou definir esses atributos.

Todos os atributos de interlação listados nesta seção têm valores boolianos. Efetivamente, cada um desses atributos pode ter três valores: TRUE, 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 TRUE, 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 é o primeiro. Se FALSE, o campo superior será o primeiro.
  • Campos únicos: se TRUE, o exemplo contém 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 for 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 obrigató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 TRUE. 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 TRUE. Obrigatórios. Não definir. Defina como TRUE.
Mixed Obrigatórios. Obrigatórios. Obrigatórios. 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 para corresponder, 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 quadro progressivo.
  • 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_RepeatFirstField ou 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 dvd).
  • Defina o tipo de mídia como MFVideoInterlace_MixedInterlaceOrProgressive.

  • Em cada quadro, defina os atributos MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirst e 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
frame = MFSampleExtension_SingleField FALSE
top_field = MFSampleExtension_SingleField VERDADE
= MFSampleExtension_BottomFieldFirst FALSE
bottom_field = MFSampleExtension_SingleField VERDADE
= MFSampleExtension_BottomFieldFirst VERDADE

 

progressive_frame

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

 

top_field_first

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

 

repeat_first_field

Valor Atributo de exemplo
0 = MFSampleExtension_RepeatFirstField FALSE
1 = MFSampleExtension_RepeatFirstField VERDADE

 

exemplos de Single-Field

Se o tipo de mídia for MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower, significará que cada amostra 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, deve levar esse fato em conta ao acessar os dados no buffer.

A mesma regra se aplica à abertura geométrica (atributo MF_MT_GEOMETRIC_APERTURE ) e à abertura de exibição mínima (atributo MF_MT_MINIMUM_DISPLAY_APERTURE ). 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 interlação por exemplo estão contidas no membro dwTypeSpecificFlags 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 FALSO.
AM_VIDEO_FLAG_FIELD1 = MFSampleExtension_Interlaced VERDADEIRO.
= MFSampleExtension_SingleField TRUE.
= MFSampleExtension_BottomFieldFirst FALSE.
AM_VIDEO_FLAG_FIELD2 = MFSampleExtension_Interlaced TRUE.
= MFSampleExtension_SingleField TRUE.
= MFSampleExtension_BottomFieldFirst TRUE.
AM_VIDEO_FLAG_WEAVE = MFSampleExtension_Interlaced FALSE. (Esse sinalizador indica que o driver não deve desintercalizar os dois campos.)
AM_VIDEO_FLAG_FIELD1FIRST = MFSampleExtension_BottomFieldFirst FALSE. Se o conteúdo estiver entrelaçado e o sinalizador AM_VIDEO_FLAG_FIELD1FIRST não estiver presente, defina esse atributo como TRUE.
AM_VIDEO_FLAG_REPEAT_FIELD = MFSampleExtension_RepeatFirstField TRUE. Se o sinalizador 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 TRUE.
AMINTERLACE_1FieldPerSample = MFSampleExtension_SingleField TRUE.
AMINTERLACE_Field1First = MFSampleExtension_BottomFieldFirst FALSE.

 

Tipos de mídia de vídeo

Tipos de mídia