'directx'에 해당되는 글 1건

  1. 2007/09/01 DirectShow 세팅 및 사용 예(VC++)
음..이거 예전에 잠깐 하다가 말아서...까먹을까바...정리해논거...-0-

================================================================
다이렉트쇼 사용 세팅
================================================================
1. 인클루딩 세팅
sdk dshow baseclasses 폴더를 인클루딩세팅(최상위 인클루드)
sdk dshow baseclasses\\debug or \\release 폴더를 lib세팅(최상위 라이브러리)

2.프로젝트세팅(알트+F7)
링크탭의 제너럴 카테고리에서 object/library modules에 아래 파일 포함
strmbasd.lib strmiids.lib
strmbasd.lib는 디버그파일이며 strmbase.lib가 릴리즈파일
포함 파일은 상황에 따라 변경

3.초기화
어플리케이션 초기화부분에
CoInitialize(NULL); //COM 사용을 위한 초기화
끝나기 전에
CoUninitialize();




================================================================
다이렉트쇼 사용 예
================================================================
IGraphBuilder *m_pGB; //그래프빌더 선언

아래와 같이 인스턴스 생성
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&m_pGB);

IMediaControl *m_pMC;
m_pGB->QueryInterface(IID_IMediaControl, (void**)&m_pMC);

그래픽빌더에서 미디어컨트롤개체 유무판단하여 개체포인터 얻어와 사용

사용후 반드시 릴리즈


================================================================
필터추가 사용 예
================================================================

IBaseFilter *pFilterOverlayMixer;
//필터개체 선언
LIF(CoCreateInstance(CLSID_INNIS_OverlayMixer, NULL,
    CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&pFilterOverlayMixer));
//오버레이믹서개체 생성
LIF(m_pGB->AddFilter(pFilterOverlayMixer, L"Overlay Mixer"));
//그래픽빌더에 오버레이필터 추가
SAFE_RELEASE(pFilterOverlayMixer);
//릴리즈



================================================================
클래스가 정의 되어있지 않은 필터를 부를때
================================================================

클래스를 사용자가 수동으로 선언 선언형식은 아래와 같이.....

// Overlay Mixer {CD8743A1-3736-11D0-9E69-00C04FD7C15B}
DEFINE_GUID(CLSID_INNIS_OverlayMixer,
    0xcd8743a1, 0x3736, 0x11d0, 0x9e, 0x69, 0x0, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b);


위와 같이 헤더파일을 작성한뒤 사용할 cpp파일에 인클루딩
인클루딩전에는 guid초기화를 위해 initguid.h파일을 인클루딩

sample.cpp 내용
-----------
.
.

#include <initguid.h>
#include "myuuids.h"

.
.
.


위와같이 선언 뒤 사용


================================================================
그래프스파이 사용
================================================================
프로젝트세팅의 C/C++탭의 전처리기 선언부분에 REGISTER_FILTERGRAPH를 추가
#ifdef REGISTER_FILTERGRAPH
    DWORD                m_dwGraphRegister ; //변수 선언
#endif
선언한 변수를 초기화

필터작업 뒤에

#ifdef REGISTER_FILTERGRAPH
    hr=AddGraphToRot(m_pGB, &m_dwGraphRegister);
    if(FAILED(hr))
        m_dwGraphRegister = 0;
#endif

를 기재 AddGraphToRot는 이미 있는 함수 그대로 사용

해제작업시에
#ifdef REGISTER_FILTERGRAPH
    RemoveGraphFromRot(m_dwGraphRegister);
    m_dwGraphRegister = 0;
#endif
를 기재 RemoveGraphFromRot는 이미 만들어진 함수 그대로 사용

위 두 함수가 레지스트리에 등록 및 제거하는 함수이며

이상태로 실행된 상태에서 그래프에디터에서 필터그래프를 확인 가능

================================================================


지금 보니...머가먼지..ㅡㅡ;; 언제 시간날때 디쇼의 세계로 다시....
2007/09/01 21:51 2007/09/01 21:51