Changer les paramètre d'un filtre directshow sans utiliser la page de propriété

Résolu
oeildedinde Messages postés 29 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 16 janvier 2013 - 10 mars 2011 à 14:18
oeildedinde Messages postés 29 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 16 janvier 2013 - 12 mars 2011 à 13:04
Bonjour,
Je cherche à modifier les paramètres d'un filtre directshow depuis une application faite en c++ express. Le filtre en question est une modification du filtre EZRGB24 de la sdk. Je voudrai pouvoir passer d'un effet vidéo à l'autre sans utiliser la page de proprieté du filtre.
Quelqu'un saurait il comment il faut s'y prendre?
J'ai cherché sur google et la MSDN sans rien trouver.

5 réponses

oeildedinde Messages postés 29 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 16 janvier 2013
12 mars 2011 à 13:04
Bon ca marche.
Le problème n'a rien à voir avec la variable que j'ai cité ci-dessus.
C'etait un problème d'instance. Mon application n'appelait pas le filtre chargé dans le graphe mais une autre instance de celui-ci.
La solution est donc:


HRESULT wPlayer::changeEffect(int nBr)
{

IBaseFilter *mytransform = NULL;
HRESULT hr = m_pGraph->FindFilterByName(L"eZrgb24", &mytransform);

if (SUCCEEDED(hr))
{
doChange(mytransform);
}

SafeRelease(&mytransform);

return -1;

}


HRESULT wPlayer::doChange(IBaseFilter *pFilter, int val)
{

IIPEffect *ieffect;
if( !pFilter )
{
return E_POINTER;
}

HRESULT hr = pFilter->QueryInterface(IID_IIPEffect,(void**)&ieffect);

if (SUCCEEDED(hr))
{
hr = ieffect->put_IPEffect(val);
}

SafeRelease(&ieffect);

return hr;
}
3
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
11 mars 2011 à 02:02
salut,

Tu as essayé de rechercher en anglais ?
Peut-être cette discussion pourrait t'aider.


@++
0
oeildedinde Messages postés 29 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 16 janvier 2013
11 mars 2011 à 12:48
Salut,

Oui j'ai essayé de chercher en anglais. Il y a pas beaucoup d'info en francais. J'ai jeté un oeil sur le lien que tu m'as donné, et j'ai pas trouvé ce que je cherche. En même temps je débute un peut en c++, peut être qu'un truc m'a échapé. En tout cas, merci d'avoir essayé de m'aider.
0
oeildedinde Messages postés 29 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 16 janvier 2013
11 mars 2011 à 13:05
J'ai testé ca, il y a pas d'erreur, mais ca marche pas.

/////////////////////////////////////////
IIPEffect *m_pIPEffect;
HRESULT hr1 = CoCreateInstance(CLSID_EZrgb24, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter , (void **)&m_pIPEffect);
if(SUCCEEDED(hr1))
{
m_pIPEffect->put_IPEffect(1011);
}
return -1;
///////////////////////////////////////////

(J'ai inclu une copie du header IeZ.h pour la fonction put_effect)
la fonction put_effect n'a qu'un parametre (elle à été modifiée dans le filtre ezrgb24 et dans le header)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oeildedinde Messages postés 29 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 16 janvier 2013
11 mars 2011 à 18:25
Du nouveau.

Mon application declanche bien la fonction (du filtre ezrgb24):
STDMETHODIMP CEZrgb24::put_IPEffect(int IPEffect)
En y mettant un messagebox, celui-ci apparait bien.

le hic c'est que malgré que la variable "m_effect", prenne la bonne valeur, aucun effet ne change. Cela est peut être du au fait que cette variable soit définie à la fois dans le fichier "ezprop.h" et dans "ezrgb24.h". Enfin bon, je continue à chercher.
0
Rejoignez-nous