Question

Je traite actuellement avec Windows Media Foundation. Cependant, en raison de certains problèmes avec le décodeur H.264 Microsoft et certains décodeurs manquants pour le format personnalisé, je voudrais savoir s'il serait possible d'instancier un décodeur DirectShow directement à l'aide CLSID et construire une procuration autour qui expose IMFTransform pour obtenir un décodeur pour Media Foundation. Voici donc ma question:

Puis-je instancier un filtre DirectShow (décodeurs de préférence) directement et de les utiliser pour le décodage (à savoir mettre des trames compressées et non compressées obtenir les) pour créer un MFT?

Je sais comment instancier le filtre lui-même en utilisant son CLSID. Cependant, je n'ai aucune idée comment utiliser la fonctionnalité de décodage réel.

Des idées, des conseils, des liens tout sera appréciée. Merci,

J.

Était-ce utile?

La solution

(disclaimer:. Je n'ai jamais vraiment fait cela, mais je ne vois aucune raison technique ne peut pas être fait YMMV)

Si le décodeur est un filtre DMO, il sera beaucoup plus facile - vous pouvez parler à travers IMediaObject . Ce n'est pas vraiment très différent de la façon dont DirectShow utilise OGD; elle enveloppe simplement le DMO avec un autre filtre de transformation qui gère la négociation du type de support et le passage échantillon, mais vous ne est là vraiment arrêter de le faire dans votre propre application.

Il y a un hic: pour IMediaObject :: ProcessInput et IMediaObject :: ProcessOutput, vous aurez besoin de votre propre classe tampon qui implémente IMediaBuffer . Mais il est une interface assez basique, donc je ne pense pas que vous aurez trop de difficultés sa mise en œuvre. Voici un mise en œuvre de base .

Pour les filtres réguliers DirectShow, il va en fait être beaucoup plus difficile, parce que la plupart des filtres DirectShow dépendent vraiment de l'existence d'un graphique externe disponible (cas au point: tous les DirectShow concours complet sorte de suppose l'existence de ce graphique) . Si vous voulez vraiment utiliser un seul filtre DShow autonome, vous auriez probablement envelopper l'ensemble graphique de filtre, puis un filtre source personnalisé à des échantillons d'aliments pour animaux. Vous pouvez utiliser la carte d'acquisition d'échantillons (ou un filtre rendu personnalisé) à des échantillons de Yank sur le graphique et exposer au reste de l'application. (Une sorte d'idée folle serait même d'envelopper ce graphique dans une mise en œuvre du filtre DMO, puis utiliser IMediaObject pour lui parler - cela peut être difficile, cependant)

Heureusement plus décodeurs ont tendance à être mis en œuvre en tant que filtres DMO, donc je pense qu'il ya une forte probabilité que vous pouvez simplement utiliser IMediaObject.

Autres conseils

Je ne suis pas sûr pourquoi vous voulez faire. Vous ne voulez pas vraiment en dehors de la vie du filtre d'un graphique.

Si vous ne souhaitez pas utiliser les filtres traditionnels de source fichier / réseau, ou les équarrisseurs traditionnels, vous pouvez écrire tampon équarrisseurs, et les filtres de tampon, que vous passez des pointeurs, et obtenir des pointeurs de. Ensuite, vous pouvez laisser tomber tout ce gâchis dans un graphique et l'exécuter, et obtenir l'utilisation du décodeur à peu près directement sans rien d'autre. Ce ne serait pas difficile à faire. Le décodeur attend probablement un flux de paquets PES cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top