Bonjour à tous,
comme le titre l'indique, j'ai un souci de design de classe.
J'ai créé trois classes qui me permettent d'afficher de la vidéo
grâce à DirectShow.
J'ai une classe DS_InfosVideo, DS_AffichVideo, qui sont assez
explicites, et une dernière classe TVideoAffich qui est la fenêtre
qui affichera la vidéo, et qui a comme membres privés les deux
classes précédentes...
Je peux afficher 3 types de vidéo: les fichiers vidéo, des fichiers
XML pour la prévisualisation de montages vidéo, et de la vidéo en
temps-réel provenant d'une caméra numérique.
J'ai donc utilisé l'idiome du constructeur nommé pour chacune de ces
3 classes, ce qui me permet de charger les bonnes infos.
Par exemple, pour un fichier vidéo:
Code :
- class TVideoAffich
- {
- private:
- DS_InfosVideo * Infos;
- DS_AffichVideo * Affich;
- public:
- static TVideoAffich * CreateFromFile(const std::string & path)
- {
- Infos = DS_InfosVideo::CReateFromFile(path);
- Affich = DS_AffichVideo::CReateFromFile(path);
- }
- };
|
Pour l'instant, je limite le rendu de la vidéo à un renderer que j'ai
choisi.
Ce que j'aimerai faire maintenant, c'est proposer d'autres choix de
renderer.
Mais je ne me vois pas faire des fonctions du genre pour chacune des
classes:
Code :
- static TVideoAffich * CreateFromFileVMRRenderer(const std::string & path);
- static TVideoAffich * CreateFromFileBasicRenderer(const std::string & path);
- static TVideoAffich * CreateFromSBEVMRRenderer(const std::string & path);
|
etc...
Je voyais bien un truc du genre:
Code :
- template <class Input>
- class DS_InfosVideo : public Input
- {
- public:
- DS_InfosVideo(const std::string & path);
- };
- template <class Input , class Renderer>
- class TVideoAffich : public Input, public Renderer
- {
- private:
- DS_InfosVideo<Input> * Infos;
- DS_AffichVideo<Input,Renderer> * Affich;
- public:
- TVideoAffich(const std::string & path);
- };
|
Seulement la classe Input passée à TVideoAffich n'est pas la même
que celle que doit recevoir DS_InfosVideo ni celle de DS_AffichVideo...
Est-ce que c'est possible de poser des conditions à la compilation, de
telle sorte qu'on ait un truc du genre:
pour TVideoAffich
Code :
- si Input == VideoAffichInputFile
- {
- DS_InfosVideo<Infos_Input_File> * Infos;
- si Renderer == VideoAffichVMRRenderer
- DS_AffichVideo<Affich_Input_File,Affich_VMR_Renderer> * Affich;
- sinon
- DS_AffichVideo<Affich_Input_File,Affich_Basic_Renderer> *
- Affich;
- }
- sinon
- {
- ///
- }
|
Voilà tout
Merci d'avance
Mike