Partilhar via


Entrelaçamento 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 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. Este sinalizador é usado em pulldown 3:2, quando o quadro é progressivo, mas o fluxo está entrelaçado. Neste contexto, o primeiro campo pode ser o campo superior ou inferior.

  • Campos intercalados ou campo único. Uma amostra pode conter um único campo ou dois campos intercalados. Se uma amostra contiver um único campo, a altura da amostra será metade da altura do quadro, porque a amostra contém apenas metade das linhas de varredura de um quadro. Os 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 uma amostra para outra. 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 aprimorado (EVR) precisará reservar memória de vídeo para o desentrelaçamento. Se o vídeo for totalmente progressivo, por outro lado, o EVR pode otimizar o pipeline de renderização. Adicionar uma etapa de desentrelaçamento ao pipeline aumenta a latência de renderização.

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

  • Informações gerais sobre o entrelaçamento 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 mudar com cada amostra são colocadas na amostra como um atributo. Para obter mais informações sobre exemplos, consulte Exemplos de mídia.

Informações entrelaçadas 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çãoMFVideoInterlaceMode. 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 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 alternam entre superior e inferior, então não importa qual desses dois valores é 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 mistura de quadros entrelaçados e progressivos, ou se a dominância de campo for alternada, 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 Superior, primeiro
MFVideoInterlace_FieldInterleavedLowerFirst Sim Campos intercalados Mais baixo primeiro
MFVideoInterlace_FieldSingleUpper Sim Campo único Superior, primeiro
MFVideoInterlace_FieldSingleLower Sim Campo único Mais baixo primeiro
MFVideoInterlace_MixedInterlaceOrProgressive Pode variar Campos intercalados ou quadros progressivos Pode variar

 

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

Bandeiras entrelaçadas em amostras

As informações que podem mudar de um exemplo para o próximo são indicadas usando atributos de exemplo. Use a interfaceIMFSample para obter ou definir esses atributos.

Todos os atributos de entrelaçamento listados nesta seção têm valores booleanos. Efetivamente, cada um desses atributos pode ter três valores: TRUE, FALSEou não definido. Se um atributo não estiver definido, o valor será retirado 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 está entrelaçado. Se FALSO, o quadro é progressivo.
Defina esse atributo em cada amostra se o tipo de mídia for MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_BottomFieldFirst O significado desta bandeira depende se as amostras contêm campos intercalados ou campos únicos.
  • Campos intercalados: Se TRUE, o campo inferior é o primeiro. Se FALSO, o campo superior é o primeiro.
  • Campos únicos: Se TRUE, a amostra contém um campo inferior. Se FALSO, a amostra contém um campo superior.
Defina esse atributo em cada amostra de entrelaçamento se o tipo de mídia for MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower ou MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_RepeatFirstField Se TRUE, o primeiro campo é repetido. Se FALSE ou não estiver definido, o primeiro campo não será repetido.
MFSampleExtension_SingleField Se TRUE, o exemplo contém um único campo. Se FALSE, a amostra contém 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 Bandeira entrelaçada Bandeira BottomFieldFirst Sinalizador RepeatFirstField Sinalizador SingleField
Progressivo Opcional; se definido, deve ser FALSO. 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 FALSO.
Campos individuais Opcional; se definido, deve ser VERDADEIRO. Necessário. Não definir. Defina como TRUE.
Misto Necessário. Necessário. Necessário. Opcional; se definido, deve ser FALSO.

 

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 é obrigatório.

Por exemplo, se o tipo de mídia for MFVideoInterlace_Progressive, isso implica que todos os quadros no fluxo são progressivos. Portanto, você pode definir o atributo MFSampleExtension_Interlaced como FALSEou deixar o atributo desdefinido.

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 nem o defina 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 a mesma dominância de campo. As amostras contêm campos intercalados.
  • Defina o tipo de mídia como MFVideoInterlace_FieldInterleavedUpperFirst ou MFVideoInterlace_FieldInterleavedLowerFirst.

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

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

  • Não defina o atributo MFSampleExtension_RepeatFirstField nem o defina como FALSO em cada quadro.

  • Não defina o atributo MFSampleExtension_SingleField nem o defina como FALSO em cada quadro.

  1. O vídeo contém uma mistura de quadros entrelaçados e progressivos, com campos repetidos e dominância de campo variável (por exemplo, vídeo em 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 nem o defina como FALSO em cada quadro.

  1. O vídeo é entrelaçado e as amostras 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 nem defina-o como TRUE em cada quadro.

  • Não defina o atributo MFSampleExtension_RepeatFirstField nem o defina como FALSO em cada quadro.

  • Não defina o atributo MFSampleExtension_SingleField nem 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 = FALSO
top_field MFSampleExtension_SingleField = VERDADEIRO
MFSampleExtension_BottomFieldFirst = FALSO
bottom_field MFSampleExtension_SingleField = VERDADEIRO
MFSampleExtension_BottomFieldFirst = VERDADEIRO

 

progressive_frame

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

 

top_field_first

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

 

repeat_first_field

Valor Atributo de exemplo
0 MFSampleExtension_RepeatFirstField = FALSO
1 MFSampleExtension_RepeatFirstField = VERDADEIRO

 

Single-Field Amostras

Se o tipo de mídia for MFVideoInterlace_FieldSingleUpper ou MFVideoInterlace_FieldSingleLower, isso significa que cada amostra contém um único campo. No entanto, o tipo de mídia descreve o quadro inteiro. 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 varredura e, portanto, cada buffer contém apenas 240 linhas de pixels. Se você escrever um componente que aceita tipos de mídia com amostras de campo único, deverá levar esse fato em consideração ao acessar os dados no buffer.

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

Mapeamentos DirectShow

No DirectShow, as informações de entrelaçamento por amostra 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 DirectShow Atributo de exemplo do Media Foundation
AM_VIDEO_FLAG_INTERLEAVED_FRAME MFSampleExtension_SingleField = FALSO.
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 = VERDADE.
AM_VIDEO_FLAG_WEAVE MFSampleExtension_Interlaced = FALSO. (Este sinalizador indica que o driver não deve desentrelaçar os dois campos.)
AM_VIDEO_FLAG_FIELD1FIRST MFSampleExtension_BottomFieldFirst = FALSO. 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 = VERDADEIRO. 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 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