Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Windows mobile : capture caméra et openGL ES


Sujet :

DirectX

  1. ###raw>post.musername###
    Membre à l'essai
    Windows mobile : capture caméra et openGL ES
    je suis en train de me baser su un sample du windows mobile 6 sdk pour pouvoir afficher l'image perçue par la caméra d'un smartphone. l'exemple utilisé permet de capturer une image ou une vidéo. je voudrais pouvoir obtenir le buffer de l'image courante pour l'afficher en openGL (ES).

    le code pour capturer une photo est le suivant :

    //---------------------------------------------------------------------------------------------------------------------------------------
    HRESULT Video::captureStillImageInternal()
    {
    HRESULT hr = S_OK;
    CComPtr<IFileSinkFilter> pFileSink;
    CComPtr<IUnknown> pUnkCaptureFilter;
    CComPtr<IPin> pStillPin;
    CComPtr<IAMVideoControl> pVideoControl;
    m_pImageSinkFilter.QueryInterface( &pFileSink );
    pFileSink->SetFileName( L"\\test.jpg", NULL );
    m_pVideoCaptureFilter.QueryInterface( &pUnkCaptureFilter );
    m_pCaptureGraphBuilder->FindPin( pUnkCaptureFilter, PINDIR_OUTPUT, &PIN_CATEGORY_STILL, &MEDIATYPE_Video, FALSE, 0, &pStillPin );
    m_pVideoCaptureFilter.QueryInterface( &pVideoControl );
    pVideoControl->SetMode( pStillPin, VideoControlFlag_Trigger );
    return hr;
    }


    comment faire pour juste récupérer le buffer image ?
      0  0

  2. #2
    Membre expert
    Bonjour.

    Je pense que le principe est le même que pour Directshow avec XP, Vista, etc..

    Tu dois développer un filtre de rendu video personnalisé. Honnêtement sur ce type d'OS, je ne connais ni les possibilités ni les limitations.

    L'idée c'est que dans ton filtre de rendu tu recevras directement les frames video et après libre à toi d'en faire ce que tu veux (affichage OpenGL). Sauf que tu vas avoir des limitations (par exemple la video tourne à X fps et le rendu OpenGL à Y fps : conclusion, il faut synchroniser tout ça). Pour comprendre le principe et les difficultés tu as tout ce qui concerne le vmr9 dans le SDK directshow.

    Sous openGl, il y a une méthode qui tourne sur le net: l'idée c'est un filtre du type sampleGrabber qui récupère les frames video en dehors du graphe (le graphe tourne mais n'est pas affiché) et ensuite les frames sont affichées dans un environnement OpenGl. (google: tutorial + opengl + avi).