Partager via


Utilisation des mémoires tampons de média DMO

Les données d’entrée sont passées aux DMO codecs à l’aide de mémoires tampons de média. Une mémoire tampon multimédia est un objet qui implémente l’interface IMediaBuffer . Vous pouvez implémenter une classe à cet effet ou, si vous utilisez le Kit de développement logiciel (SDK) au format Windows Media dans votre application, vous pouvez utiliser les objets de mémoire tampon définis dans ce kit SDK.

Si vous implémentez votre propre classe de mémoire tampon, faites attention à la façon dont la mémoire tampon est gérée. Lorsque vous transmettez un exemple d’entrée, le DMO conserve une référence à la mémoire tampon jusqu’à ce qu’il soit terminé avec l’exemple. Vous pouvez immédiatement libérer votre référence à l’interface IMediaBuffer , mais vous n’avez aucun moyen de savoir quand le codec n’a plus besoin de sa référence. Pour être certain que la mémoire est libérée lorsque l’objet se supprime lui-même, vous devez implémenter votre classe afin qu’elle alloue et libère la mémoire pour la mémoire tampon en interne.

Étant donné que les DMO conservent les références aux mémoires tampons pendant une période inconnue, il n’est pas simple d’utiliser un pool limité de mémoires tampons. La solution la plus simple consiste à allouer une nouvelle mémoire tampon pour chaque échantillon, bien que cela soit inefficace.

Une meilleure solution consiste à implémenter un objet pour gérer un pool de mémoires tampons. Pour ce faire, écrivez du code dans la méthode Release de votre implémentation IMediaBuffer qui appelle une méthode de votre gestionnaire de mémoires tampons (au lieu de se supprimer elle-même) lorsque le nombre de références tombe à zéro. Le gestionnaire de mémoires tampons peut ensuite gérer une liste de pointeurs vers les objets de mémoire tampon alloués. Créez une méthode dans votre gestionnaire de mémoires tampons pour case activée la liste des mémoires tampons libres et retourner un pointeur afin que votre application puisse accéder aux mémoires tampons si nécessaire. Cette méthode doit créer de nouvelles mémoires tampons en fonction des besoins et les ajouter à la liste.

Utilisation des DMO codecs