Compartir a través de


Trabajar con búferes multimedia de DMO

Los datos de entrada se pasan a las DPO de códec mediante búferes multimedia. Un búfer multimedia es un objeto que implementa la interfaz IMediaBuffer . Puede implementar una clase para este propósito o, si usa el SDK de Windows Media Format en la aplicación, puede usar los objetos de búfer definidos en ese SDK.

Si implementa su propia clase de búfer, tenga cuidado de cómo se controla la memoria del búfer. Cuando se pasa un ejemplo de entrada, DMO mantiene una referencia al búfer hasta que finaliza con el ejemplo. Puedes liberar inmediatamente la referencia a la interfaz IMediaBuffer , pero no tienes forma de saber cuándo el códec ya no necesita su referencia. Para estar seguro de que la memoria se libera cuando el objeto se elimina, debe implementar la clase para que asigne y libere la memoria para el búfer internamente.

Dado que las DPO mantienen referencias a búferes durante un período de tiempo desconocido, no es una cuestión trivial usar un grupo limitado de búferes. La solución más sencilla es asignar un nuevo búfer para cada ejemplo, aunque hacerlo es ineficaz.

Una mejor solución es implementar un objeto para administrar un grupo de búferes. Para ello, escriba código en el método Release de la implementación de IMediaBuffer que llama a un método del administrador de búferes (en lugar de eliminarse a sí mismo) cuando el recuento de referencias cae a cero. Después, el administrador de búferes puede mantener una lista de punteros a los objetos de búfer asignados. Cree un método en el administrador de búferes para comprobar la lista de búferes libres y devolver un puntero para que la aplicación pueda acceder a los búferes cuando sea necesario. Este método debe crear nuevos búferes según sea necesario y agregarlos a la lista.

Trabajar con DPO de códec