Compartilhar via


Para usar o vídeo entrelaçado

[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador de Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador de Coletor em vez do SDK do Windows Media Format 11, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Há dois tipos básicos de codificação de vídeo: progressivo e entrelaçado. Na codificação progressiva, cada quadro é uma representação codificada de um quadro de vídeo. Na codificação entrelaçada, cada quadro é uma representação codificada de todas as linhas pares de pixels no vídeo ou todas as linhas ímpares. Cada quadro entrelaçado é chamado de campo, portanto, há campos ímpares e até campos. Uma exibição entrelaçada (como uma televisão) renderiza os campos um de cada vez, alternando campos. Uma exibição progressiva renderiza quadros de uma só vez.

O codec de Perfil Avançado do Windows Media Video 9 oferece suporte para manter a interlacagem em fluxos compactados.

Quando usar vídeo entrelaçado

A codificação de vídeo entrelaçado só é útil quando o conteúdo é exibido em um dispositivo entrelaçado. O conteúdo destinado a ser exibido em uma televisão (por meio de uma caixa set-top ou outro dispositivo) pode precisar ser entrelaçado. O conteúdo destinado a ser exibido exclusivamente em uma exibição de computador não deve ser codificado como entrelaçado.

Para codificar o vídeo entrelaçado como vídeo progressivo, você deve definir as configurações de entrada. Para obter mais informações, consulte To Deinterlace Video.

Ordem de Campos

A maioria das fontes de vídeo entrelaçado, como placas de captura de vídeo, entrega amostras de vídeo que incluem os dois campos intercalados entre si. O resultado é como um quadro completo de vídeo, exceto que as linhas ímpares e uniformes são deslocadas ligeiramente no tempo. Não há um padrão universal sobre qual campo no exemplo de vídeo intercalado ocorre primeiro no tempo.

Você deve permitir que os usuários especifiquem a ordem de campo ao passar amostras entrelaçadas para seu aplicativo.

Codificando vídeo entrelaçado

Para usar a codificação entrelaçada, execute as seguintes etapas:

  1. Configure o fluxo de vídeo no perfil para usar a extensão de unidade de dados do tipo de conteúdo chamando o método IWMStreamConfig2::AddDataUnitExtension . O GUID de extensão de exemplo para a extensão de tipo de conteúdo é WM_SampleExtensionsGUID_ContentType.
  2. Defina o fluxo no perfil e configure o gravador com o perfil normalmente.
  3. Antes de passar amostras entrelaçadas para o gravador, chame o método IWMWriterAdvanced2::SetInputSetting para definir a configuração de entrada g_wszInterlacedCoding como TRUE.
  4. Para cada exemplo entrelaçado que você passar para o gravador, chame o método INSSBuffer3::SetProperty para definir o tipo de conteúdo. Os valores de tipo de conteúdo são combinações dos sinalizadores na tabela a seguir.
Sinalizador Descrição
WM_CT_INTERLACED Sempre defina esse sinalizador ao codificar conteúdo entrelaçado. Se você usar esse sinalizador sem definir um sinalizador de ordem de campo (WM_CT_BOTTOM_FIELD_FIRST ou WM_CT_TOP_FIELD_FIRST), o codec assumirá que o campo superior é o primeiro. Se o codec usar a ordem de campo errada, não haverá impacto na qualidade da imagem, mas a eficiência da codificação será afetada.
WM_CT_BOTTOM_FIELD_FIRST Quando combinado com o sinalizador WM_CT_INTERLACED, esse sinalizador indica que o campo inferior (o campo que começa com a segunda linha no exemplo) ocorre primeiro no tempo.
WM_CT_TOP_FIELD_FIRST Quando combinado com o sinalizador WM_CT_INTERLACED, esse sinalizador indica que o campo superior (o campo que começa com a primeira linha no exemplo) ocorre primeiro no tempo.
WM_CT_REPEAT_FIRST_FIELD Indica que o primeiro campo no exemplo deve ser repetido na reprodução. Esse sinalizador é usado para vídeo que foi criado a partir de filme pelo processo telecine. Se nenhum sinalizador de ordem de campo for definido em conjunto com esse sinalizador, o campo superior deverá ocorrer primeiro a tempo.

Observação

Se o sinalizador WM_CT_INTERLACED não estiver definido, o exemplo deverá conter um quadro de vídeo progressivo.

Decodificação de vídeo entrelaçado

Ao decodificar o vídeo entrelaçado, você deve definir a configuração g_wszAllowInterlacedOutput como TRUE usando o método IWMReaderAdvanced2::SetOutputSetting . Caso contrário, o codec fornecerá quadros progressivos.

A extensão de unidade de dados do tipo de conteúdo é mantida nos exemplos de saída. Você deve passar a orientação do campo para o dispositivo de renderização para garantir a reprodução adequada.

Tópicos Avançados