|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Membre actif
![]() Date d'inscription: avril 2004
Messages: 191
|
Bonjour,
j'essaie de récupérer le flux de ma webcam locale dans mon application. Pour celà, j'utilise donc DirectShow et grace au tutoriaux j'ai réussi à pondre un code qui compile. J'arrive à lancer mon application mais la video ne s'affiche pas ... si vous avez une idée ... Code :
#include "camera.h" //CONSTRUCTEUR DE LA FENETRE Camera::Camera(QWidget *parent) : QWidget(parent) { //PARAMETRES DE LA FENETRE CAMERA this->setWindowTitle("Webcam locale") ; this->setWindowIcon(QIcon()); this->setFixedSize(QSize(170,150)) ; this->show() ; //BOUTON MUET muet = new QCheckBox("Microphone actif", this) ; muet->move(QPoint(30,128)) ; //CAMERA video = new QFrame(this) ; video->resize(160,120) ; video->move(QPoint(5,5)) ; Capture() ; } //DESTRUCTEUR Camera::~Camera() { } void Camera::Capture() { HRESULT hr; IVideoWindow * g_pVW = NULL; IMediaControl * g_pMC = NULL; IMediaEventEx * g_pME = NULL; IGraphBuilder * g_pGraph = NULL; ICaptureGraphBuilder2 * g_pCapture = NULL; IBaseFilter * pSrc = NULL; CComPtr <IMoniker> pMoniker =NULL; ULONG cFetched; CComPtr <ICreateDevEnum> pDevEnum =NULL; CComPtr <IEnumMoniker> pClassEnum = NULL; IBaseFilter *pSrcFilter=NULL; hr = CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **) &g_pGraph); // Create the capture graph builder hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **) &g_pCapture); // Obtain interfaces for media control and Video Window hr = g_pGraph->QueryInterface(IID_IMediaControl,(LPVOID *) &g_pMC); hr = g_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &g_pVW); hr = g_pGraph->QueryInterface(IID_IMediaEvent, (LPVOID *) &g_pME); hr = g_pCapture->SetFiltergraph(g_pGraph); //creation du device enumerator hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void **) &pDevEnum); //creation du video device enumerator hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0); if (S_OK == (pClassEnum->Next (1, &pMoniker, &cFetched))) { // Bind Moniker to a filter object hr = pMoniker->BindToObject(0,0,IID_IBaseFilter, (void**)&pSrc); } hr = g_pCapture->RenderStream (&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pSrcFilter, NULL, NULL); hr = g_pMC->Run(); hr= g_pVW->put_Owner((OAHWND)video->winId()); hr = g_pVW->put_Visible(OATRUE); } |
|
|
|
|
|
#3 (permalink) |
|
Membre actif
![]() Date d'inscription: avril 2004
Messages: 191
|
j'ai rajouté hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
mais j'ai des erreurs : error C2065: 'COINIT_MULTITHREADED' : identificateur non déclaré error C3861: 'CoInitializeEx' : identificateur introuvable pour j'ai bien fait une include de objbase.h |
|
|
|
|
|
#4 (permalink) |
|
Membre régulier
![]() Date d'inscription: décembre 2005
Localisation: Montréal
Messages: 132
|
Tu as vraiment besoin du CoInitializeEx ? le CoInitialize ne te suffit pas ?
Sinon dans la doc ( http://msdn2.microsoft.com/en-us/library/ms695279.aspx ) c'est écrit : You must include the #define _WIN32_DCOM preprocessor directive at the beginning of your code to be able to use CoInitializeEx. |
|
|
|
|
|
#5 (permalink) |
![]() |
Dans les problèmes que j'ai rencontré, il y a aussi le nombre de périphériques retournés qu'il faut gérer, si tu as une webcam positionné en premier dans ta liste cela va fonctionner, sinon il ne va pas savoir forcément lire l'interface retourné.
Par exemple sur mon PC sur le premier périphérique, il me renvoie l'interface de ma carte TNT. Donc il faut énumérer le tout et prendre la bonne entrée. Télécharge mon exemple sur la capture de webcam qui utilise mon SDK ici, tu verras si tu as une ou plusieurs entrées sur ton PC, cela pourra te mettre sur une piste, je n'ai pas de code sur moi pour comparer mon code au tiens...
__________________
|
|
|
|
|
|
#7 (permalink) | ||
![]() Date d'inscription: décembre 2003
Localisation: GRASSE
Âge: 35
Messages: 961
|
Citation:
http://msdn2.microsoft.com/en-us/library/ms678543.aspx Citation:
|
||
|
|
|
|
|
![]() |
||
DirectShow et webcam
|
||
| Outils de la discussion | |
|
|