Aller au contenu

[Aide] DirectShow : Vidéo dans le programme


Karles
 Share

Recommended Posts

Bonjour,

 

J'ai commencé à utiliser DirectShow (module vidéo de directx), mais un détail très important que je voudrais corriger apparait : mon programme ouvre une autre fenêtre et lis la vidéo dedans. Moi je souhaite que la vidéo se lise EN FOND du programme initial.

 

Nous sommes dans le contexte d'une page de login pour un jeu, codé en C++. J'aimerais faire comme le login de league of legends, un fond animé (une vidéo dans mon cas).

 

Voici mon code actuel :

void ....
{
[AUTRE CODE]
//Système video-login
	IGraphBuilder* pGraph; 
	IMediaControl* pMediaControl; 
	IMediaEvent *pEvent; 

	CoInitialize(NULL); 

	// Create the filter graph manager and query for interfaces. 
	CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
	pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
	pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); 

	// Build the graph. 
	pGraph->RenderFile(L"C:\\test.avi", NULL); 
	pMediaControl->Run(); 
	long evCode;
	pEvent->WaitForCompletion(INFINITE, &evCode); // Wait for completion. 

	// Clean up.
    pMediaControl->Release();
    pGraph->Release();
    CoUninitialize();
}

Mais voila ma vidéo se lance bien mais dans une fenêtre à part...

 

J'aimerais savoir si quelqu'un sait comment utiliser le fond de la fenêtre principale au lieu d'en créer une nouvelle.

 

Merci d'avance et bonne soirée !

 

Cordialement,

Karles

Lien vers le commentaire
Partager sur d’autres sites

Peut-être que cette classe ou une des fonctions nécessite de passer le handle ou l'instance de ta fenêtre principal pour se lancer là dessus au lieu d'en créer une autre.(Simple supposition)

 

Sinon, je jetterai un coup d'oeil à DirectShow en arrivant chez moi.

Lien vers le commentaire
Partager sur d’autres sites

D'après ton code (je ne connait pas cette lib, mais le nom des fonctions est équivoque) tu as l'air de lui demander de re-créer une fenêtre. Renvois un peu ton code et la doc, il doit y avoir un moyen de lancer le tout dans une fenêtre.

Lien vers le commentaire
Partager sur d’autres sites

D'après ton code (je ne connait pas cette lib, mais le nom des fonctions est équivoque) tu as l'air de lui demander de re-créer une fenêtre. Renvois un peu ton code et la doc, il doit y avoir un moyen de lancer le tout dans une fenêtre.

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos réponses.

 

Mais si je poste c'est que je n'y arrive pas vraiment. J'ai lu des vieux cours, des doc etc.. j'ai pas vraiment trouvé concernant l'intégration dans le programme, puis j'ai fait des dizaines d'essais j'ai du recompiler 20x mini avec plusieurs combi différentes.

Lien vers le commentaire
Partager sur d’autres sites

Selon ce que j'ai lu sur MSDN, le deuxième paramètre de CoCreateInstance spécifie si l'instance va faire partie d'un ensemble ou non (Null = seul autre > Pointeur vers l'object de l'ensemble dont on veut le rattacher).

 

 

 

pUnkOuter [in]

If NULL, indicates that the object is not being created as part of an aggregate. If non-NULL, pointer to the aggregate object's IUnknown interface (the controlling IUnknown).

 

 

C'est ce que je crois, j’interprète peut-être mal. ._.

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Chargement
 Share

×
×
  • Créer...