|
어떤어떤 사정으로 DirectX를 공부할 시간도 없이
DirectShow를 이용해서 피씨카메라를 통해서 화상캡쳐하는 프로그램을
만들어야하게 되었습니다... 하.. ㅠ_ㅠ..
DirectX 8.0a SDK 를 보고 프리뷰 하는 부분까지만 대충 짜봤습니다만..
이상한 Linker Error들이 뜨네요.. ㅠ_ㅠ
염치 없지만 조언을 구합니다..
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CoInitialize(NULL);
IVideoWindow * g_pVW = NULL;
IMediaControl * g_pMC = NULL;
IMediaEventEx * g_pME = NULL;
IGraphBuilder * g_pGraph = NULL;
ICaptureGraphBuilder2 * g_pCapture = NULL;
// Create the filter graph.
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **)&g_pGraph);
// Create the capture graph builder.
CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **)&g_pCapture);
g_pGraph->QueryInterface(IID_IMediaControl,(LPVOID *) &g_pMC);
g_pGraph->QueryInterface(IID_IVideoWindow, (LPVOID *) &g_pVW);
g_pGraph->QueryInterface(IID_IMediaEvent, (LPVOID *) &g_pME);
g_pCapture->SetFiltergraph(g_pGraph);
// Create the system device enumerator.
ICreateDevEnum *pDevEnum = NULL;
CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
IID_ICreateDevEnum, (void **)&pDevEnum);
// Create an enumerator for video capture devices.
IEnumMoniker *pClassEnum = NULL;
pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0);
ULONG cFetched;
IMoniker *pMoniker = NULL;
IBaseFilter *pSrc = NULL;
if (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK)
{
// Bind the first moniker to a filter object.
pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);
pMoniker->Release();
}
pClassEnum->Release();
pDevEnum->Release();
// pSrc is the capture filter from the previous code example.
g_pGraph->AddFilter(pSrc, L"Video Capture");
g_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,
pSrc, NULL, NULL);
pSrc->Release();
// g_pVW->put_Owner((long)ghApp);
g_pVW->put_Owner((OAHWND)Handle);
g_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
g_pVW->SetWindowPosition(0, 0, 320, 240);
g_pVW->put_Visible(OATRUE);
g_pMC->Run();
CoUninitialize();
}
소스코드는 위와 같구요..
Linker Error 메세지는
[Linker Error] Unresolved external '_MEDIATYPE_Video' referenced from C:\WORK\DSHOW2\UNIT1.OBJ
[Linker Error] Unresolved external '_PIN_CATEGORY_PREVIEW' referenced from C:\WORK\DSHOW2\UNIT1.OBJ
네요..
아.. 그리고 헤더엔
DShow.h, mtype.h, Uuids.h
이렇게 추가로 include 시켜줬구요..(뒤에 둘은 하나 안하나.. 마찬가지 였습니다만..;;)
그럼 행복한 하루 되세요.. ㅠ_ㅠ
|