begin process at 2008 07 04 12:16:36
1 204 587 membres
128 nouveaux aujourd'hui
14 116 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : jouer un .avi [ Archives / DirectX ] (k_otik)

jouer un .avi le 02/10/2005 01:22:26

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

Re : jouer un .avi le 02/10/2005 01:32:48

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


Re : jouer un .avi le 02/10/2005 03:30:11

racpp
(Admin CS)
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.



Re : jouer un .avi le 02/10/2005 13:55:52

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.


Re : jouer un .avi le 02/10/2005 15:01:52

racpp
(Admin CS)
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.



Re : jouer un .avi le 02/10/2005 16:34:48

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
++


Classé sous : compiler, vidéo, avi, jouer, actuellement

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS