-->Analog Video in Capture>------>XvidMPEG4 CODEC>--->XvidMPEG4 decoder>----->Renderer preview>------>Renderer 0001 (hope u can picture out the directshow graph i cannot copy and paste the diagram...or even attach it here...) and the code for this is: <code> //Don't forget to change project settings: //1. C++: add include path to DirectShow include folder (such as c:/dxsdk/include) //2. Link: add link path to DirectShow lib folder (such as c:/dxsdk/lib). //3. Link: add strmiids.lib and quartz.lib #include "stdafx.h" #include <DShow.h> #include <atlbase.h> #include <initguid.h> BOOL hrcheck(HRESULT hr, TCHAR* errtext) { if (hr >= S_OK) return FALSE; TCHAR szErr[MAX_ERROR_TEXT_LEN]; DWORD res = AMGetErrorText(hr, szErr, MAX_ERROR_TEXT_LEN); if (res) printf("Error %x: %s/n%s/n",hr, errtext,szErr); else printf("Error %x: %s/n", hr, errtext); return TRUE; } //change this macro to fit your style of error handling #define CHECK_HR(hr, msg) if (hrcheck(hr, msg)) return hr; CComPtr<IBaseFilter> CreateFilter(WCHAR* displayName) { IBindCtx *pBindCtx; HRESULT hr = CreateBindCtx(0, &pBindCtx); if (hrcheck(hr, "Can't create bind context")) return NULL; ULONG chEaten = 0; IMoniker *pMoniker = 0; hr = MkParseDisplayName(pBindCtx, displayName, &chEaten, &pMoniker); pBindCtx->Release(); if (hrcheck(hr, "Can't create parse display name of the filter")) return NULL; IBaseFilter *pFilter = NULL; if (SUCCEEDED(hr)) { hr = pMoniker->BindToObject(pBindCtx, NULL, IID_IBaseFilter, (void**)&pFilter); pMoniker->Release(); if (hrcheck(hr, "Can't bind moniker to filter object")) return NULL; } return CComPtr<IBaseFilter>(pFilter); } // {B87BEB7B-8D29-423F-AE4D-6582C10175AC} DEFINE_GUID(CLSID_VideoRenderer, 0xB87BEB7B, 0x8D29, 0x423F, 0xAE, 0x4D, 0x65, 0x82, 0xC1, 0x01, 0x75, 0xAC); //quartz.dll // {17CCA71B-ECD7-11D0-B908-00A0C9223196} DEFINE_GUID(CLSID_Conexant2388xVideoCapture, 0x17CCA71B, 0xECD7, 0x11D0, 0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96); //ksproxy.ax // {64697678-0000-0010-8000-00AA00389B71} DEFINE_GUID(CLSID_XvidMPEG4VideoDecoder, 0x64697678, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71); //xvid.ax HRESULT BuildGraph(IGraphBuilder *pGraph) { HRESULT hr = S_OK; //graph builder CComPtr<ICaptureGraphBuilder2> pBuilder; hr = pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder2); CHECK_HR(hr, "Can't create Capture Graph Builder"); hr = pBuilder->SetFiltergraph(pGraph); CHECK_HR(hr, "Can't SetFiltergraph"); //add Video Renderer CComPtr<IBaseFilter> pVideoRenderer; hr = pVideoRenderer.CoCreateInstance(CLSID_VideoRenderer); CHECK_HR(hr, "Can't create Video Renderer"); hr = pGraph->AddFilter(pVideoRenderer, L"Video Renderer"); CHECK_HR(hr, "Can't add Video Renderer to graph"); //add Conexant 2388x Video Capture CComPtr<IBaseFilter> pConexant2388xVideoCapture; hr = pConexant2388xVideoCapture.CoCreateInstance(CLSID_Conexant2388xVideoCapture); CHECK_HR(hr, "Can't create Conexant 2388x Video Capture"); hr = pGraph->AddFilter(pConexant2388xVideoCapture, L"Conexant 2388x Video Capture"); CHECK_HR(hr, "Can't add Conexant 2388x Video Capture to graph"); //add Xvid MPEG-4 Video Decoder CComPtr<IBaseFilter> pXvidMPEG4VideoDecoder; hr = pXvidMPEG4VideoDecoder.CoCreateInstance(CLSID_XvidMPEG4VideoDecoder); CHECK_HR(hr, "Can't create Xvid MPEG-4 Video Decoder"); hr = pGraph->AddFilter(pXvidMPEG4VideoDecoder, L"Xvid MPEG-4 Video Decoder"); CHECK_HR(hr, "Can't add Xvid MPEG-4 Video Decoder to graph"); //add Xvid MPEG-4 Codec CComPtr<IBaseFilter> pXvidMPEG4Codec = CreateFilter(L"@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}//xvid"); hr = pGraph->AddFilter(pXvidMPEG4Codec, L"Xvid MPEG-4 Codec"); CHECK_HR(hr, "Can't add Xvid MPEG-4 Codec to graph"); //add Video Renderer CComPtr<IBaseFilter> pVideoRenderer2; hr = pVideoRenderer2.CoCreateInstance(CLSID_VideoRenderer); CHECK_HR(hr, "Can't create Video Renderer"); hr = pGraph->AddFilter(pVideoRenderer2, L"Video Renderer"); CHECK_HR(hr, "Can't add Video Renderer to graph"); //connect Conexant 2388x Video Capture and Xvid MPEG-4 Video Decoder hr = pBuilder->RenderStream(NULL, &MEDIATYPE_Video, pConexant2388xVideoCapture, NULL, pXvidMPEG4VideoDecoder); CHECK_HR(hr, "Can't connect Conexant 2388x Video Capture and Xvid MPEG-4 Video Decoder"); //connect Conexant 2388x Video Capture and Xvid MPEG-4 Codec hr = pBuilder->RenderStream(NULL, &MEDIATYPE_Video, pConexant2388xVideoCapture, NULL, pXvidMPEG4Codec); CHECK_HR(hr, "Can't connect Conexant 2388x Video Capture and Xvid MPEG-4 Codec"); //connect Xvid MPEG-4 Video Decoder and Video Renderer hr = pBuilder->RenderStream(NULL, &MEDIATYPE_Video, pXvidMPEG4VideoDecoder, NULL, pVideoRenderer); CHECK_HR(hr, "Can't connect Xvid MPEG-4 Video Decoder and Video Renderer"); //connect Conexant 2388x Video Capture and Video Renderer hr = pBuilder->RenderStream(NULL, &MEDIATYPE_Video, pConexant2388xVideoCapture, NULL, pVideoRenderer2); CHECK_HR(hr, "Can't connect Conexant 2388x Video Capture and Video Renderer"); //connect Xvid MPEG-4 Codec and Xvid MPEG-4 Video Decoder hr = pBuilder->RenderStream(NULL, &MEDIATYPE_Video, pXvidMPEG4Codec, NULL, pXvidMPEG4VideoDecoder); CHECK_HR(hr, "Can't connect Xvid MPEG-4 Codec and Xvid MPEG-4 Video Decoder"); return S_OK; } int main(int argc, char* argv[]) { CoInitialize(NULL); CComPtr<IGraphBuilder> graph; graph.CoCreateInstance(CLSID_FilterGraph); printf("Building graph.../n"); HRESULT hr = BuildGraph(graph); if (hr==S_OK) { printf("Running"); CComQIPtr<IMediaControl, &IID_IMediaControl> mediaControl(graph); hr = mediaControl->Run(); CHECK_HR(hr, "Can't run the graph"); CComQIPtr<IMediaEvent, &IID_IMediaEvent> mediaEvent(graph); BOOL stop = FALSE; while(!stop) { long ev=0, p1=0, p2=0; Sleep(500); printf("."); if (mediaEvent->GetEvent(&ev, &p1, &p2, 0)==S_OK) { if (ev == EC_COMPLETE || ev == EC_USERABORT) { printf("Done!/n"); stop = TRUE; } else if (ev == EC_ERRORABORT) { printf("An error occured: HRESULT=%x/n", p1); mediaControl->Stop(); stop = TRUE; } mediaEvent->FreeEventParams(ev, p1, p2); } } } CoUninitialize(); return 0; }