Partilhar via


Codificação de vídeo entrelaçada (Microsoft Media Foundation)

Os dados de vídeo destinados ao uso com computadores normalmente são progressivos, o que significa que cada quadro é codificado como uma única imagem. Alguns dispositivos, como televisores, não exibem um quadro de uma só vez, mas como duas imagens. Uma das imagens, ou campos, contém todas as linhas numeradas pares. O outro campo contém os dados de todas as linhas numeradas ímpares. O vídeo codificado com mais de um campo por quadro é chamado de entrelaçado, pois é renderizado alternando entre o campo par e o campo ímpar.

No passado, o conteúdo de vídeo entrelaçado sempre era desassociado antes da codificação com o codec de Vídeo do Windows Media. A partir do Windows Media 9 Series, no entanto, o codificador de vídeo dá suporte à compactação de conteúdo entrelaçado sem primeiro convertê-lo em progressivo. Manter a interlacção em um arquivo codificado é importante se o conteúdo for renderizado em uma exibição entrelaçada, como uma televisão. Esse recurso é de importância crescente, pois o suporte para conteúdo baseado em Windows Media se espalha para leitores de DVD, set-top boxes e outros eletrônicos domésticos.

A maneira mais fácil de codificar e fornecer vídeo entrelaçado é desenvolver seu aplicativo usando o SDK do Windows Media Format e armazenando o conteúdo em arquivos ASF. As informações entrelaçadas sobre quadros são passadas para o codec usando extensões de unidade de dados, que funcionam bem para conteúdo ASF, mas são um pouco mais complicadas de dar suporte em outros contêineres. Para obter mais informações sobre extensões de unidade de dados, consulte Usando extensões de unidade de dados.

Para dar suporte à codificação entrelaçada, há duas etapas principais: obter as informações de quadro para o codificador e fornecer as informações para o aplicativo de renderização. Essas etapas são descritas nos parágrafos a seguir.

Vídeo entrelaçado e o codificador

A primeira etapa na codificação de vídeo com interlacagem mantida é configurar o codificador para codificar campos entrelaçados. Para fazer isso, defina a propriedade MFPKEY_INTERLACEDCODINGENABLED como TRUE. Isso prepara o codificador para receber amostras entrelaçadas. Cada exemplo de entrada deve conter ambos os campos.

Cada exemplo que você processar com o codificador depois de ativar a codificação entrelaçada deve ter uma extensão de unidade de dados anexada. Exemplos sem a extensão de unidade de dados esperada são considerados progressivos. O GUID que identifica a extensão é D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC. Os valores passados pelos objetos do SDK do Windows Media Format são definidos na tabela a seguir.

Valor Descrição
0x00000020 Especifica que o exemplo é codificado com o campo inferior primeiro. Esse valor só é significativo quando combinado com o valor entrelaçado.
0x00000040 Especifica que o exemplo é codificado com o campo superior primeiro. Esse valor só é significativo quando combinado com o valor entrelaçado.
0x00000080 Especifica que o exemplo está entrelaçado. Esse é o único valor que é significativo para os DMOs codec.

 

Um dos dois primeiros valores é sempre combinado com 0x80 usando um OR bit a bit antes de ser definido no exemplo. No entanto, o codificador verifica apenas 0x80 e desconsidera o restante da extensão. Se a extensão identificar o exemplo como entrelaçado, o codificador manterá a interlacção de exemplo no fluxo compactado e inserirá um sinalizador de indicação no fluxo para que o decodificador possa identificar quadros entrelaçados. Cada amostra entrelaçada é marcada, para que o conteúdo de origem que é uma combinação de progressivo e entrelaçado possa ser codificado em um fluxo juntos.

O objeto gravador do SDK de Formato de Mídia do Windows inclui as extensões de unidade de dados de tipo de conteúdo nos exemplos que ele grava na seção de dados do contêiner ASF para uso no momento da renderização.

Leitura e renderização de vídeo entrelaçado

O decodificador identifica amostras entrelaçadas com base no sinalizador definido no fluxo pelo codificador. Como padrão, o decodificador desinterlacea os exemplos e fornece saídas progressivas. O aplicativo player pode configurar o decodificador para processar saídas com interlacagem mantida definindo a propriedade MFPKEY_DECODER_DEINTERLACING .

A dificuldade na reprodução de vídeo entrelaçada surge depois que o decodificador entrega os exemplos. O renderizador (cartão de vídeo ou chip em um dispositivo) não pode exibir corretamente o conteúdo do vídeo sem saber qual campo é qual. Em aplicativos que usam o SDK do Windows Media Format, a extensão de unidade de dados de tipo de conteúdo é recuperada dos exemplos descompactados e pode ser passada para o dispositivo.

Ao usar os objetos codec diretamente, nenhuma dessas transferências de dados é automática. Você deve implementar o suporte à extensão de unidade de dados, tanto em seus objetos de buffer quanto no contêiner que você usa para o conteúdo codificado. Os tipos mais comuns de contêineres de mídia (como a AVI) não dão suporte a metadados de nível de exemplo. Você pode implementar seu próprio sistema para armazenar os dados no arquivo e associá-los a exemplos individuais, mas apenas um leitor personalizado poderá recuperá-los.

Observação

Definir a propriedade MFPKEY_INTERLACEDCODINGENABLED como TRUE e, em seguida, não enviar nenhum exemplo com a extensão de unidade de dados do tipo de conteúdo anexada pode fazer com que o codificador falhe. Defina o codificador para codificação entrelaçada somente se você tiver amostras entrelaçadas a serem entregues.

 

Trabalhando com vídeo