Je suis maintenant en train d'explorer la courbe d'apprentissage de Windows Media Foundation et je me concentre sur deux exemples de code très similaires pour m'aider à comprendre la technologie. Même si les deux utilisent Media Session pour un programme "Play" très simple qui lit la vidéo à partir d'un fichier, il existe des différences subtiles importantes.Quel exemple de code MF Play montre les techniques COM appropriées dans Media Foundation?
Le premier échantillon est MF Play de Microsoft à l'adresse:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd979592(v=vs.85).aspx
Il n'a pas initialize COM et ne fonctionne pas de verrous de section critique mais il joue vidéo très bien. Le manque d'utilisation de COM limitera-t-il son utilisation d'autres façons, par exemple lors du traitement de plusieurs flux vidéo pour séparer les fenêtres par multithreading? Puisque ce code est en ligne, je suppose que ce code est plus courant.
Le deuxième exemple provient du livre "Développement de Microsoft Media Foundation Applications - Par Anton Polinger". J'ai téléchargé exemple de code d'ici: https://www.microsoftpressstore.com/content/images/9780735656598/downloads/9780735656598_files.zip
Ce programme de lecture dans le dossier Chapitre 3 est un peu plus complexe en raison de l'utilisation de ces fonctions d'initialisation COM:
// initialize COM
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
...
// uninitialize COM
CoUninitialize();
Il utilise également plusieurs verrous de section critique à l'aide :
CComCritSecLock<CComAutoCriticalSection> lock(m_critSec);
Mais mystérieusement, il n'y a pas de déblocage correspondant(). Donc, quelqu'un peut-il expliquer ces différences importantes potentielles entre ces deux échantillons de code et celles que je devrais utiliser? Je suis inquiet que si je n'utilise pas les méthodes COM, je pourrais avoir des problèmes plus tard quand j'essayer de diffuser plusieurs vidéos sur plusieurs fenêtres, ou pire je pourrais avoir des problèmes de fiabilité. Sur une note de côté, le code Polinger fonctionne mais ne gère pas le redimensionnement de la fenêtre pendant la lecture de la vidéo. Je tentais d'ajouter dans le code similaire à la façon dont le code MS fait en utilisant ce code après un événement redimensionnement de la fenêtre:
m_pVideoDisplay->SetVideoPosition(NULL, &rcDest)
L'utilisation de ce programme juste fait de geler.
Toute aide serait grandement appréciée!
Merci pour votre réponse et vos liens! Et surtout pour éclaircir comment le destructeur fait le déblocage. Pas un tel mystère maintenant. –