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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
| #include<dshow.h>
#include <d3d9.h>
#include <vmr9.h>
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atlctl.h>
//#include "dshowutil.h"
#define WM_GRAPHNOTIFY WM_APP + 1
#define CLASSNAME "EventNotify"
#define SAFE_RELEASE(i) {if (i) i->Release(); i = NULL;}
STDMETHODIMP Avi2WavConvertor(LPCWSTR file, /*HWND g_hwnd,*/ LPCWSTR waveFile)
{
IBaseFilter *pWavDest;
IBaseFilter *pFileWriter;
IGraphBuilder *pGraphBuilder;
IFileSinkFilter2 *pFileSink;
IMediaControl *pMC;
IMediaEventEx *pEvent;
HRESULT hr;
HWND hwnd;
//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);
}
//add a source filter to the graph
CComPtr<IBaseFilter> pSource;
hr = pGraphBuilder->AddSourceFilter(L"C:\\Documents and Settings\\alexandre cadiou\\Bureau\\hdfg.avi", L"Source", &pSource);
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to add the source to the graph", NULL, NULL);
}
//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 = pFileSink->SetMode(AM_FILE_OVERWRITE);
if(FAILED(hr))
{
MessageBox(NULL,L"Failed to OverWrite", 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);
}
//récupération des interfaces courantes IMEDIACONTROL et IMEDIAEVENT
pGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&pMC);
pGraphBuilder->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);
//execute le graph
hr = pMC->Run();
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to Run", NULL, NULL);
}
hr = pMC->Stop();
if(FAILED(hr))
{
MessageBox(NULL, L"Failed to stop", NULL, NULL);
}
hr = pGraphBuilder->RemoveFilter(pFileWriter);
hr = pGraphBuilder->RemoveFilter(pWavDest);
return S_OK;
}
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