이 기사는 DirectShow의 아주 기본적인 셋팅과 사용법에 대해서 알아 보겠습니다.
DirectX 8.0을 기준으로 하고있습니다.
COM에 대한 기본적인 지식이 있으면 더 좋겠습니다.
DirectShow를 사용하기 위해서 dshow.h를 인클루드해주며, strmiids.lib를 링크해줍니다.
사용할 인터페이스들을 선언합니다.
IGraphBuilder *pGB = NULL;
IMediaControl *pMC = NULL;
IVideoWindow *pVW = NULL;
IMediaEventEx *pME = NULL;
다음으로 컴포넌트를 사용하기 위한 초기화를 해줍니다.
CoInitialize(NULL);
참고 : 사용이 끝나고 나면 CoUniitialize()를 해줍니다.
파일 플레이 등의 일을 해주는 인터페이스들을 만들어 줍니다.
필터그래프관리자를 만들기 위해서
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void**)&pGB);
이제 COM 인터페이스에 쿼리를 합니다.
pGB->QueryInterface(IID_IMediaControl, (void**)&pMC);
pGB->QueryInterface(IID_IVideoWindow, (void**)&pVW);
QueryInterface를 통해서 pMC와 pVW에 해당 인터페이스를 담아달라고 요청하는 것입니다. 이 부분은 COM에 대한 이해를 조금만 하시면 금방 이해 하실수 있습니다.
플레이등의 명령과 같은 파일을 제어하기 위한 필터들과 연결하기 위해
pGB->RenderFile(L”test.avi”, NULL);
참고 : “L”은 아스키문자열을 와이드캐릭터 문자열로 변환한다.
DirectShow로 플레이 가능한 데이터 타입들이다.
Microsoft Windows Media Video codec version 7.0*
ISO MPEG-4 video version 1.0*
Microsoft MPEG-4 version 3*
Sipro Labs ACELP*
Windows Media Audio*
MPEG Audio Layer-3 (MP3) (decompression only)
Digital Video (DV)
MPEG-1
MJPEG
Indeo
Voxware*
Cinepak
재생하기 위한 차일드 윈도우의 세팅을 한다.
부모윈도의 설정
pVW->put_Owner((OAHWND)g_hwnd);
자식윈도우 설정
pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
RECT rect;
GetClientRect(g_hwnd, &rect);
pVW->SetWindowPosition(0, 0, rect.right, rect.bottom);
영상파일을 실행한다.
pMC->Run();
by Redef( http://www.redef.pe.kr )
댓글을 달아 주세요