Para forçar Key-Frame inserção
[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 do 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 do 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.]
O codec do Windows Media Video 9 dá suporte à inserção forçada de quadro-chave. Ao passar um exemplo para o gravador, você pode especificar que ele deve ser codificado como um quadro-chave.
Para forçar a inserção de quadro chave para um exemplo, execute as etapas a seguir.
- Aloque um buffer para manter o exemplo e recupere um ponteiro para a interface INSSBuffer que contém o buffer chamando IWMWriter::AllocateSample.
- Recupere o local e o tamanho do buffer criado na etapa 1 chamando INSSBuffer::GetBufferAndLength.
- Copie seus dados de exemplo para o local do buffer, certificando-se de que o exemplo passado caberá no buffer alocado. Dependendo da origem de seus exemplos, você pode usar uma variedade de funções para copiar os dados. Por exemplo, se você estiver copiando um fluxo de um arquivo AVI, poderá usar a função AVI, AVIStreamRead.
- Atualize a quantidade de dados usada no buffer para refletir o tamanho real do exemplo chamando INSSBuffer::SetLength.
- Obtenha um ponteiro para a interface INSSBuffer3 chamando INSSBuffer::QueryInterface.
- Defina o exemplo como um quadro-chave forçado chamando o método INSSBuffer3::SetProperty para definir a propriedade WM_SampleExtensionGUID_OutputCleanPoint. Essa propriedade é um valor booliano; defina-o como TRUE.
- Passe a interface do buffer para o gravador juntamente com o número de entrada e o tempo de exemplo usando o método IWMWriter::WriteSample .
Tópicos relacionados