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

Signaler
Messages postés
29
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
16 janvier 2013
-
oeildedinde
Messages postés
29
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
16 janvier 2013
-
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

Messages postés
29
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
16 janvier 2013

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;
}
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

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


@++
Messages postés
29
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
16 janvier 2013

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.
Messages postés
29
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
16 janvier 2013

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)
Messages postés
29
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
16 janvier 2013

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.