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.
|
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.
- 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.
- 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.
- 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.
- 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. |
Tópicos relacionados