Trabalhando com buffers de mídia DMO
Os dados de entrada são passados para os DMOs codec usando buffers de mídia. Um buffer de mídia é um objeto que implementa a interface IMediaBuffer . Você pode implementar uma classe para essa finalidade ou, se estiver usando o SDK de Formato de Mídia do Windows em seu aplicativo, poderá usar os objetos buffer definidos nesse SDK.
Se você implementar sua própria classe de buffer, tenha cuidado com a maneira como a memória do buffer é tratada. Quando você passa um exemplo de entrada, o DMO mantém uma referência ao buffer até que ele seja concluído com o exemplo. Você pode liberar imediatamente sua referência à interface IMediaBuffer , mas não tem como saber quando o codec não precisa mais de sua referência. Para ter certeza de que a memória é liberada quando o objeto se exclui, você deve implementar sua classe para que ela aloque e libere a memória para o buffer internamente.
Como os DMOs mantêm referências a buffers por um período desconhecido, não é uma questão trivial usar um pool limitado de buffers. A solução mais simples é alocar um novo buffer para cada exemplo, embora isso seja ineficiente.
Uma solução melhor é implementar um objeto para gerenciar um pool de buffers. Para fazer isso, escreva código no método Release da implementação do IMediaBuffer que chama um método do gerenciador de buffers (em vez de excluir a si mesmo) quando a contagem de referência cai para zero. Em seguida, o gerenciador de buffers pode manter uma lista de ponteiros para objetos de buffer alocados. Crie um método no gerenciador de buffers para marcar a lista de buffers gratuitos e retorne um ponteiro para que seu aplicativo possa acessar buffers quando necessário. Esse método deve criar novos buffers conforme necessário e adicioná-los à lista.
Tópicos relacionados