begin process at 2012 02 10 07:29:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

DirectX

 > 

jouer un .avi


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

jouer un .avi

dimanche 2 octobre 2005 à 01:22:26 | jouer un .avi

k_otik

Bonjour à tous,

Que ce soit une vidéo de format .avi ou autre, j'ai la nécessité actuellement de lancer une video au niveau de la présentation du jeu que je réalise actuellement avec le sdk de directx 9.0.
Or, impossible de compiler les headers de directShow il y a un problème que je n'arrive pas à résoudre ( je travail sous Dev-cpp) j'ai quand même de la repartie donc ma question est ;  y a t-il quelqu'un qui ait déja réussi a compiler un programme utilisant directShow pour lire une vidéo ou alors quelqu'un connait-il une librairie excellente qui me permettrait d'en faire autant ?

Merci beaucoup pour vos réponses futures,
Salutations
dimanche 2 octobre 2005 à 01:32:48 | Re : jouer un .avi

k_otik

Ca peut, peut-etre vous aider:

C:/Dev-Cpp/include/strmif.h: At global scope:
C:/Dev-Cpp/include/strmif.h:20565: error: expected constructor, destructor, or type conversion before '(' token
C:/Dev-Cpp/include/strmif.h:20565: error: expected `,' or `;' before '(' tokenC:/Dev-Cpp/include/strmif.h:28961: error: declaration of `GUID tagVMRGUID::GUID'
C:/Dev-Cpp/include/winnt.h:1351: error: changes meaning of `GUID' from `typedef struct _GUID GUID

dimanche 2 octobre 2005 à 03:30:11 | Re : jouer un .avi

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
J'ai déjà fait un code source qui permet de lire des clips avi ou autres:
http://www.cppfrance.com/code.aspx?ID=33111
J'espère que ça te sera utile.


dimanche 2 octobre 2005 à 13:55:52 | Re : jouer un .avi

k_otik

Merci racpp, ta source est vraiment bien, je ne l'ai pas encore compilé mais comme tu l'a présenté tu te sert de l'activeX wmp et j'ai remarqué que j'avais les memes erreurs ( à peu près) de compilation que tu as eu, notamment avec EXTERN_GUID, mais hélas je n'arrive pas à m'en défaire.

Voici mon programme de base avec directX et directShow:
#include <Windows.h>
#include <mmsystem.h>
#include <d3dx9.h>
#include <dshow.h>

#define WM_GRAPHNOTIFY  WM_APP + 1


LPDIRECT3D9             g_pD3D           = NULL;
LPDIRECT3DDEVICE9       g_pd3dDevice     = NULL;

IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEventEx *pEvent = NULL;

HWND hWnd;
HDC hdc;


HRESULT InitD3D( HWND hWnd )
{
 
   
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

  
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

   
    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }

   
    g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );

   
    g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );

    return S_OK;
}

//directShow
 HRESULT InitDirectShow(HWND hWnd)
 {
  //Create Filter Graph
 HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
      CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);

  //Create Media Control and Events
 hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
 hr = pGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);

  //Load a file
  hr = pGraph->RenderFile(L"test.avi", NULL);

 //Set window for events
 pEvent->SetNotifyWindow((OAHWND)hWnd, WM_GRAPHNOTIFY, 0);

 //Play media control
 pControl->Run();


 return S_OK;
}

void HandleGraphEvent()
{
    // Disregard if we don't have an IMediaEventEx pointer.
    if (pEvent == NULL)
    {
        return;
    }
    // Get all the events
    long evCode;
    LONG_PTR param1, param2;

    while (SUCCEEDED(pEvent->GetEvent(&evCode, &param1, &param2, 0)))
    {
        pEvent->FreeEventParams(evCode, param1, param2);
        switch (evCode)
        {
        case EC_COMPLETE:  // Fall through.
        case EC_USERABORT: // Fall through.
        case EC_ERRORABORT:
            PostQuitMessage(0);
            return;
        }
    }
}

HRESULT InitGeometry()
{
    return S_OK;
}

 

VOID Cleanup()
{
 if(pGraph)
  pGraph->Release();

 if(pControl)
  pControl->Release();

 if(pEvent)
  pEvent->Release();

    if( g_pd3dDevice != NULL )
        g_pd3dDevice->Release();

    if( g_pD3D != NULL )
        g_pD3D->Release();
}

 

VOID SetupMatrices()
{
   
    D3DXMATRIXA16 matWorld;
   
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

    D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
    D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
    g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );


    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
    g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

 


VOID Render()
{
  
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                         D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
   
 
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
      
        SetupMatrices();

      
        g_pd3dDevice->EndScene();
    }


    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

 


LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            Cleanup();
            PostQuitMessage( 0 );
            return 0;
   
  case WM_GRAPHNOTIFY:
   HandleGraphEvent();
   return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}

 

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
 
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      "D3D", NULL };
    RegisterClassEx( &wc );

   
 hWnd = CreateWindow( "D3D", "Direct Show",
                              WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
                              GetDesktopWindow(), NULL, wc.hInstance, NULL );

 HRESULT hr = CoInitialize(NULL);

 hdc = GetDC(hWnd);

   
    if( SUCCEEDED( InitD3D( hWnd ) ) )
    {
  if(FAILED(InitDirectShow(hWnd)))
   return 0;

       
        if( SUCCEEDED( InitGeometry() ) )
        {
           
            ShowWindow( hWnd, SW_SHOWDEFAULT );
            UpdateWindow( hWnd );

           
            MSG msg;
            ZeroMemory( &msg, sizeof(msg) );
            while( msg.message!=WM_QUIT )
            {
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
                else
                    Render();
            }
        }
    }

 CoUninitialize();

    UnregisterClass( "D3D", wc.hInstance );
    return 0;
}
Le programme est bon, j'en suis sur, maintenant en effet les erreurs affichés par Dev-cpp se trouve dans le fichier strmif.h


#ifndef _IAMFilterGraphCallback_
#define _IAMFilterGraphCallback_
// Note: Because this interface was not defined as a proper interface it is
//       supported under C++ only. Methods aren't stdcall.
EXTERN_GUID(IID_IAMFilterGraphCallback,0x56a868fd,0x0ad4,0x11ce,0xb0,0xa3,0x0,0x20,0xaf,0x0b,0xa7,0x70);
//20565 C:\Dev-Cpp\include\strmif.h expected constructor, destructor, or type conversion before '(' token
20565 C:\Dev-Cpp\include\strmif.h expected `,' or `;' before '(' token

interface IAMFilterGraphCallback : public IUnknown
{
    // S_OK means rendering complete, S_FALSE means retry now.
    virtual HRESULT UnableToRender(IPin *pPin) = 0;
 
};
#endif // _IAMFilterGraphCallback_



typedef struct tagVMRGUID
    {
    GUID *pGUID;
    GUID GUID;//28961 C:\Dev-Cpp\include\strmif.h declaration of `GUID tagVMRGUID::GUID'
    }  VMRGUID;

#if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
#define GUID_DEFINED
typedef struct _GUID {
 unsigned long  Data1;
 unsigned short Data2;
 unsigned short Data3;
 unsigned char  Data4[8];
} GUID, *REFGUID, *LPGUID;//1351 C:\Dev-Cpp\include\winnt.h changes meaning of `GUID' from `typedef struct _GUID GUID'
#define SYSTEM_LUID { QuadPart:999 }
#endif /* GUID_DEFINED */

Je suis sur qu'on peut résoudre ces erreurs, j'ai vraiment besoin d'aide...merci beaucoup à tous.

dimanche 2 octobre 2005 à 15:01:52 | Re : jouer un .avi

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
J'ai bien voulu tester ton code mais, hélas, DirectX 9 n'est pas installé sur mon pc et je n'ai pas le SDK contenant les fichiers *.h nécessaires. Il s'agit dans ton code d'idetificateurs (ou constantes) non reconnus par Dev-C++. Pour bien initialiser les GUIDs tu peux ajouter <initguid.h> comme ceci:
#include <windows.h>
#include <initguid.h>

#include <mmsystem.h>
#include <d3dx9.h>
#include <dshow.h>

J'espère que ça réduira le nombre d'erreurs.


dimanche 2 octobre 2005 à 16:34:48 | Re : jouer un .avi

k_otik

Merci mais çà n'a rien donner, c'est pas grave j'ai réussi à compiler en modifiant les headers et j'arrive à lire le avi :)

Pour les intéressés:
J'ai simplement mis en commentaire ceci:
//    GUID GUID;  ligne 28961 de strmif.h

J'ai enlevé l'inclusion de strsafe.h à la ligne 41 dans DShow.h

de la ligne 20561 de strmif.h jusqu'à la ligne 20572

//#ifndef _IAMFilterGraphCallback_
//#define _IAMFilterGraphCallback_
//// Note: Because this interface was not defined as a proper interface it is
////       supported under C++ only. Methods aren't stdcall.
//EXTERN_GUID(IID_IAMFilterGraphCallback,0x56a868fd,0x0ad4,0x11ce,0xb0,0xa3,0x0,0x20,0xaf,0x0b,0xa7,0x70);
//interface IAMFilterGraphCallback : public IUnknown
//{
//    // S_OK means rendering complete, S_FALSE means retry now.
//    virtual HRESULT UnableToRender(IPin *pPin) = 0;
//
//};
//#endif // _IAMFilterGraphCallback_

Voilà et çà ce compile sous Dev-cpp
++


Cette discussion est classée dans : compiler, vidéo, avi, jouer, actuellement


Répondre à ce message

Sujets en rapport avec ce message

Lire une vidéo avi dans les MFC [ par mickey ] J'ai conçu un programme en MFC et en cpp.Peut on lire une vidéo avi dans une boite de dialogue faites en MFC ?Connaissez vous une adresse où je peux t lecture d'un fichier avi comprenant un clip vidéo et non une animation par des boutons de dialogue box ou contrôleur MCI avec le langage c++ [ par brrouabdellah ] je trouve des difficultés à réaliser un programme en c++ qui peut lire un fichier avi comprenant un clip vidéo et non une animation. Mr Vieuxlion a ré Compression d'une vidéo AVI en MPEG2 [ par stamina ] J'ai un projet à faire pour mon BTS et un problème se pose. Je l'étudie depuis des semaines mais je ne vois vraiment pas comment passer une avi en mpe serie d'image bmp à partir de vidéo AVI [ par little_bius ] Bonjour,Je voudrai savoir s'il est possible de transformer une vidéo au format AVI en une série d'image bmp.Par exemple si on a une vidéo de 30 second lecture d'une vidéo AVI dans une appli MFC [ par seb2086 ] Bonjour à tous,Je voudrait pouvoir lancer automatiquement la lecture d'une vidéo à l'aide du contrôle Activex Windows MEDIA PLAYER lorsque la fenêtre Jouer une vidéo sous openGL ( xvid) [ par Captain_Zurg ] Bonjour à tous, je me présente, Geoffrey Sebald effectuant des études en programmation.Bref, j'ai effectué beaucoup de recherches concernant la lectur Comment compresser des images AVI (RAW) pour obtenir une vidéo MPEG-4? [ par clad1986 ] Bonjour à tous! Je suis programmeur C++ professionnel, développant sous Windows XP, avec le compilateur Microsoft Visual Studio .NET 2003, des applic aider moi svp [ par madidoinf2010 ] bn jour ; j'est un code source en C++ rédiger sur UNIX et compiler avec g++,je cherche a le compiler sous Windows et j'est pas trouvé un IDE compatibl Recherche programmeur C++ pour jeu vidéo 3D [ par JamesSunderIand ] Tout d'abord, un grand bonjour à toute la communauté de CPP France ! Mon équipe et moi-même recherchons comme indiqué dans le titre un Programmeur C


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,072 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales