Escrevendo exemplos de imagem de vídeo
[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.]
Um fluxo de Imagem de Vídeo é um vídeo que contém uma série de imagens paradas. As imagens podem se mover dentro do quadro e cada imagem pode se misturar com a próxima. Os fluxos de imagem de vídeo são codificados usando o codec Windows Media Video 9 Image v2. O vídeo de saída é semelhante ao criado pelo codec do Windows Media Video 9.
Para criar um perfil que contenha um fluxo de Imagem de Vídeo, comece enumerando os codecs de vídeo, conforme descrito em Obtendo informações de configuração de fluxo de codecs. Pesquise o codec que dá suporte ao subtipo WMMEDIASUBTYPE_WVP2.
Depois de definir o perfil no objeto gravador, chame IWMWriter::GetInputProps para obter as propriedades de mídia para o fluxo de entrada imagem de vídeo. Obtenha o tipo de mídia do objeto de propriedades de mídia chamando IWMMediaProps::GetMediaType e altere o subtipo para WMMEDIASUBTYPE_VIDEOIMAGE. Você deve definir a largura e a altura do vídeo para as dimensões máximas necessárias para abranger as imagens que você adicionará ao fluxo. Em seguida, chame IWMMediaProps::SetMediaType com o tipo de entrada modificado. Agora você está pronto para começar a enviar amostras para o objeto gravador.
Cada exemplo deve começar com uma estrutura WMT_VIDEOIMAGE_SAMPLE2 . Além disso, os exemplos podem conter imagens de bitmap. Uma imagem é anexada apenas a um exemplo para o primeiro quadro no qual ela aparece. Todos os quadros adicionais que usam essa imagem precisam apenas de informações na estrutura. Bitmaps de entrada devem ser formatados como RGB, 24 bits por pixel.
Os arquivos bitmap armazenam os dados da imagem para que os dados de cada linha da imagem levem um número de bytes divisível por quatro. (Isso é chamado de passo do bitmap.) Isso força o início de cada linha de vídeo para um limite DWORD , o que torna a cópia mais eficiente. Se as linhas de imagem não forem uniformemente divisível por quatro, a linha será adicionada ao próximo múltiplo mais alto de quatro bytes. Ao anexar dados de imagem, você deve remover qualquer preenchimento que exista no final dos dados para cada linha.
O codec Windows Media Video 9 Image v2 mantém até duas imagens na memória por vez. Essas imagens são chamadas de imagem anterior e imagem atual. Cada imagem tem um conjunto de membros na estrutura WMT_VIDEOIMAGE_SAMPLE2 , que ditam como a imagem é apresentada no quadro. Você pode adicionar uma imagem definindo o membro dwControlFlags de WMT_VIDEOIMAGE_SAMPLE2 como WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Quando você passa um quadro de entrada para o codec, essa imagem se torna a imagem atual. A imagem que era a imagem atual no exemplo anterior geralmente se torna a imagem anterior e a imagem que era a imagem anterior na amostra anterior é descartada. Você pode configurar o codec para manter a imagem anterior antiga definindo o membro bKeepPrevImage como TRUE. Nesse caso, a imagem que era a imagem atual no exemplo anterior é descartada.
A composição básica de um quadro de Imagem de Vídeo é determinada por dois fatores para cada imagem: região de interesse e coeficiente de combinação. A região de interesse de uma imagem é definida por um ponto de origem, largura e altura. A parte de uma imagem descrita pela região de interesse preenche o quadro de saída. Se a região de interesse for um tamanho diferente do quadro de saída, o codec o redimensiona. O coeficiente de mesclagem da imagem determina a mesclagem das duas imagens. Os coeficientes de mesclagem para as imagens atuais e anteriores devem totalizar 1,0. Por exemplo, se fCurrBlendCoef estiver definido como 0,5 e fPrevBlendCoef estiver definido como 0,5, o quadro de saída será composto por uma combinação igual das regiões de interesse de ambas as imagens.
Manipulando a região de interesse de uma imagem, você pode criar efeitos de painel e zoom. Os coeficientes de mesclagem permitem que você esmaeça (dissolver) entre imagens. Além desses efeitos, você pode usar uma das transições predefinidas para criar quadros mais complexos. As transições disponíveis são descritas na seção Transições de Imagem de Vídeo desta documentação. Ao usar uma transição, você deve configurar cada quadro. A maneira mais fácil de fazer isso é criar uma função que altere incrementalmente os membros da estrutura WMT_VIDEOIMAGE_SAMPLE2 para um efeito completo.
Para obter mais informações sobre os valores a serem definidos para deformações, consulte WMT_VIDEOIMAGE_SAMPLE2.
Nota Se você quiser incluir áudio em um arquivo com um fluxo de Imagem de Vídeo, deverá usar entrada de áudio descompactada. Para combinar um fluxo de Imagem de Vídeo com um fluxo de áudio compactado existente, você deve descompactar o áudio e passar os exemplos em descompactado. Se você passar amostras compactadas para o gravador ao escrever um fluxo de Imagem de Vídeo, ocorrerá um erro, resultando na retirada de amostras do vídeo.
Além disso, arquivos compactados de Imagem de Vídeo sem fluxos de áudio podem conter vários quadros de vídeo muito pequenos e altamente compactados em um único pacote ASF, o que pode resultar em uma experiência de reprodução ruim em versões anteriores do Reprodutor Multimídia do Windows. Para evitar esse problema, a melhor solução é inserir um fluxo de áudio silencioso no arquivo, embora isso também aumente o tamanho do arquivo.
Tópicos relacionados