1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| #include<dshow.h>
#include <d3d9.h>
#include <vmr9.h>
#define WM_GRAPHNOTIFY WM_APP + 1
#define CLASSNAME "EventNotify"
#define SAFE_RELEASE(i) {if (i) i->Release(); i = NULL;}
void Avi2WavConvertor(LPCWSTR file, LPCWSTR waveFile)
{
IBaseFilter *pWavDest;
IBaseFilter *pFileWriter;
IGraphBuilder *pGraphBuilder;
IFileSinkFilter2 *pFileSink;
IMediaControl *pMC;
IMediaEventEx *pEvent;
ICaptureGraphBuilder2 *m_pCapture;
HRESULT hr;
//creation d'un graph de capture
hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,
CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&m_pCapture);
if(FAILED(hr))
{
MessageBox(NULL, L"Unable to create capture graph", NULL, NULL);
}
//creation d'un graph builder
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraphBuilder);
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to Create Graph Builder", NULL, NULL);
}
//spécifie le graphe avec lequel on travaille ici le "pGraphBuilder"
hr = m_pCapture->SetFiltergraph(pGraphBuilder);
if(FAILED(hr))
{
MessageBox(NULL, L"Failed", NULL, NULL);
}
pGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&pMC);
pGraphBuilder->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);
//creation d'un wavdest filter
static const GUID CLSID_WavDest =
{ 0x3c78b8e2, 0x6c4d, 0x11d1,
{ 0xad, 0xe2, 0x0, 0x0, 0xf8, 0x75, 0x4b, 0x99 } };
hr = CoCreateInstance(CLSID_WavDest, NULL,
CLSCTX_INPROC, IID_IBaseFilter, (void **)&pWavDest);
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to Create WaveDest Filter", NULL, NULL);
}
//Creation d'un filewriter
hr = CoCreateInstance(CLSID_FileWriter, NULL, CLSCTX_INPROC,
IID_IFileSinkFilter2, (void **)&pFileSink);
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to Create FileSink2 Filter", NULL, NULL);
}
// Get the file sink interface pointer from the File Writer
hr = pFileSink->QueryInterface(IID_IBaseFilter, (void **)&pFileWriter);
if(FAILED(hr))
{
MessageBox(NULL, L"Unable to get the File Writer interface pointer from the File Sink", NULL, NULL);
}
hr = pFileSink->SetFileName(waveFile, NULL);
if(FAILED(hr))
{
MessageBox(NULL, L"Couldnt create wav file", NULL, NULL);
}
//////////////////////////////////////////////////////////
//adding wavdest to the graph
hr = pGraphBuilder->AddFilter(pWavDest, L"WAV DEST");
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to add WavDest To Graph", NULL, NULL);
}
hr = pGraphBuilder->RenderFile(file, NULL);
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to RenderFile", NULL, NULL);
}
//////////////////////////////////////////////////////////////
//adding writer to the graph
hr = pGraphBuilder->AddFilter((IBaseFilter *)pFileWriter, L"File Writer");
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to add Writer To Graph", NULL, NULL);
}
}
int main(void)
{
WCHAR *file = L"C:\\Documents and Settings\\alexandre cadiou\\Bureau\\hdfg.avi";
WCHAR *wavefile = L"C:\\Documents and Settings\\alexandre cadiou\\Bureau\\hdfg.wav";
Avi2WavConvertor( file, wavefile);
return 0;
} |
Partager