8R2 고재관 myaustin@korea.com Mobile Devices Microsoft MVP
Microsoft 공인전문가 600시간세미나 / 강의실무경력 14 년 Portable Device since 1995 집필도서 윈도우임베디드 CE 프로그래밍입문 (2008.3, 정보문화사 ) 윈도우임베디드 CE 프로그래밍 (2006, 정보문화사 ) 팔아라! 실전PDA프로그래밍 (2002, 삼각형프레스 ) Starting Mobile PDA Programming (2001, 삼각형프레스 ) 전문분야 Mobile Device 컨설턴트및 Market Planner Windows Mobile 기반휴대폰 Software 제작 DirectShow 기반개발전문가
이미지핸들링 알파블랜딩 DirectX DirectShow 재생 DirectShow 필터 데모및프로그램코드실행
Graphic Device Interface GDI 그래픽디바이스 Device Context DC 출력장치 ( 디스플레이, 프린터 ) Graphics Windows and Event Handler GWE WM_PAINT 무효영역 Draw 전체윈도우 Redraw
BeginPaint 무효영역유효화 ( 보이지않다가보이는영역 ) 그릴영역계산및대상선정 사용할 DC 가져옴 EndPaint 호출 DC 해제 필수호출 WM_PAINT 처리와무관
사용자임의로전체그리기지시 BOOL InvalidateRect ( 윈도우핸들, 영역, 화면지우기 ); WM_PAINT 임의처리불가 반드시운영체제로부터받아야함
DC 생성 HDC GetDC( 윈도우핸들 ); 윈도우 DC HDC GetWindowDC ( 윈도우핸들 ); DC 해제 INT ReleaseDC( 윈도우핸들, DC)
PatBlt BitBlt Raster Operation Code MaskBlt TransparentBlt StretchBlt AlphaBlend
패턴출력 BOOL PatBlt ( 출력 DC, 시작칸, 시작줄, 폭, 높이, 레스터연산코드 ); 래스터연산코드 래스터연산코드 PATCOPY PATINVERT DSTINVERT BLACKNESS WHITENESS 기능지정된브러쉬색상으로채우기지정된브러쉬색상의반대색으로채우기화면에이미있는색상을반전검은색으로지우기흰색으로지우기
비트출력 BOOL BitBlt ( 출력 DC, 시작칸, 시작줄, 폭, 높이, 원본 DC, 시작칸, 시작줄, 레스터연산코드 ); Ex) 시작칸시작줄 출력 DC 시작줄 시작칸 원본 DC 높이 지정한높이만큼만가져옴 폭
래스터연산코드 기능 MERGECOPY 화면과비트맵이미지의색을합침 ( 논리 AND 연산자사용 ) MERGEPAINT 화면과비트맵이미지의색을조합 ( 논리 OR 연산자사용 ) NOTSRCCOPY 출력한내용을반전한후화면에반영 NOTSRCERASE 화면과비트맵이미지의색을조합반전 ( 논리 OR 연산자사용 ) PATPAINT 비트맵의색반전후패턴의색과조합.( 논리 OR 연산자사용 ) 변동된결과와화면의색을다시조합함 SRCAND 화면과비트맵이미지의색을조합 ( 논리 AND 연산자사용 ) SRCCOPY 화면에비트맵을그대로반영 SRCERASE 화면을반전한후비트맵과조합 ( 논리 AND 연산자사용 ) SRCINVERT 화면과비트맵의색을조합 ( 논리 XOR 연산자사용 ) SRCPAINT 화면과비트맵의색을조합 ( 논리 OR 연산자사용 )
마스크 BOOL MaskBlt ( 출력 DC, 시작칸, 시작줄, 폭, 높이, 원본 DC, 시작칸, 시작줄, 마스크이미지, 시작칸, 시작줄, 레스터연산코드 ); Ex) 출력 DC 마스크원본 DC 마스크영역만출력
색상투과 BOOL TransparentBlt ( 출력 DC, 시작칸, 시작줄, 폭, 높이, 원본 DC, 시작칸, 시작줄, 폭, 높이, 투과색 ); Ex) 시작칸시작줄 출력 DC 시작줄 시작칸 원본 DC 높이 RGB(255,255,0) 투과높이줄임 높이 폭 폭
출력방향 BOOL StretchBlt ( 출력 DC, 시작칸, 시작줄, 폭, 높이, 원본 DC, 시작칸, 시작줄, 폭, 높이, 래스터연산코드 ); Ex) 시작칸시작줄 출력 DC 시작줄 시작칸 원본 DC 높이 높이, 폭에 -1 를곱한크기 높이 폭 폭
알파블랜딩 BOOL AlphaBlend ( 출력 DC, 시작칸, 시작줄, 폭, 높이, 원본 DC, 시작칸, 시작줄, 폭, 높이, BLENDFUNCTION 구조체 ); typedef struct _BLENDFUNCTION { BYTE BlendOp; BYTE BlendFlags; 0 AC_SRC_OVER BYTE SourceConstantAlpha; 비율 (0~255) BYTE AlphaFormat; 0 }BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;
고재관 MOBILE DEVICES MICROSOFT MVP
구성 DirectInput DirectDraw Direct3D DirectPlay DirectSound Direct3DSound DirectMusic DirectShow DirectAnimation DirectSetup WindG/WaveMix 결과물과거 Game SDK Media Layer DirectShow Direct Animation Foundation Layer DirectPlay Direct3D DirectDraw Draw DirectSound DirectInput t Direct3D
DirectShow (DShow) 미디어플레이 / 캡쳐기능 DirectDraw (DDraw) 2 차원그래픽 API Direct3D Mobile (D3DM) 3 차원그래픽 API
Windows Embedded CE Windows CE.NET 4.x 이후 DX 포함은제조사선택적디바이스마다개발환경이상이함 (SDK필수) Windows Mobile DX 반드시지원 Windows Mobile 5.0 이상의모든디바이스 DShow, DDraw, D3DM 반드시포함개발자에게 Target 플렛폼의호환성보장
COM 인터페이스 DllRegisterServer : 레지스트리에등록 DllUnregisterServer : 레지스트리에해제 DllGetClassObject : 호출시연결 DllCanUnloadNow : 호출해제및연결해제 IUnknown 템플릿기반 HKEY_CLASSES_ROOT\CLSID\{CLSID} QueryInterface COM 으로부터객체를추출. UUID형태사용
embedded Visual C++ Windows CE 5.0 / WM 4.0 까지지원 Windows Embedded CE 6.0 / WM 5.0 불가 Visual Studio 2005 Windows CE 5.0 / WM 4.0 부터지원 Device Emulator Manager 1.0 Platform Builder 6.0 R2 for Visual Studio 2005 Visual Studio 2008 VS2005 와동일지원 Device Emulator Manager 3.0.NET Compact Framework 이용가능
Internet Explorer 6 DirectShow 재생 / 캡쳐응용프로그램 ActiveX ( 플레이어 & 카메라 ) DirectShow 필터그래프매니져 캡쳐 프리뷰 코덱 Muxer Renderer 네트워크파일시스템 DirectDraw GDI 웨이브 API 파일시스템 네트워크 파일시스템 그래픽 오디오 비디오 카메라드라이버 하드웨어
DirectShow(DShow) 는 DirectX 의일부주요기능 고품질의비디오 / 오디오재생과녹음이가능다양한형식의미디어지원재생, 캡쳐, 변환기능지원 구조 COM 기반의 Control WDM(Windows Driver Model) 기반캡쳐기능지원 Code Name Quartz Active Movie 1.0 DirectShow 2.0
응용프로그램응용프로그램 DirectShow DirectShow 통지통지호출호출소스필터소스필터변환필터변환필터랜더필터랜더필터필터그래프매니져필터그래프매니져 VCM/ACM VCM/ACM 코덱코덱소스필터소스필터변환필터변환필터랜더필터랜더필터파일시스템파일시스템웨이브웨이브 API API DirectDraw DirectDraw 파일시스템파일시스템커널커널스트리밍스트리밍 WDM WDM 캡쳐디바이스캡쳐디바이스 VFW VFW 캡쳐디바이스캡쳐디바이스하드웨어하드웨어디코더디코더사운드카드사운드카드비디오카드비디오카드
COM 인터페이스 IGraphBuilder 필터그래프 (Filter Graphs) 생성 IMediaControl : 미디어플레이제어 ( 재생, 중지 ) IMediaEventEx : 이벤트통지 IVideoWindow : 비디오윈도우 IBasicAudio : 오디오볼륨및밸런스제어 IBasicVideo : 비디오출력정보제공및제어 IMediaSeeking : 미디어위치이동
#include <streams.h> int WINAPI WinMain( ) { IGraphBuilder *pgraph = NULL; IMediaControl *pmediacontrol = NULL; IMediaEvent *pmediaevent = NULL; // COM 초기화 CoInitializeEx(NULL, COINIT_MULTITHREADED); // Step1: 필터그래프매니져생성 CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pgraph); pgraph->queryinterface(iid_imediacontrol, (void **)&pmediacontrol); pgraph->queryinterface(iid_imediaevent, IMediaEvent (void **)&pmediaevent);
< 이어서 > // Step2: 그래프빌드 pgraph->renderfile(l"\\hello_world.avi",null); // Step3: 재생및이벤트대기 pmediacontrol->run(); long evcode; pmediaevent->waitforcompletion(infinite,evcode); eda e at oco peto Code); } // 해제 pmediacontrol->release(); pmediaevent->release(); pgraph->release(); // COM해제 CoUninitialize();
비디오윈도우담을윈도우지정 // pgraph 는필터그래프매니져를통해얻은포인터 IVideoWindow *pvidwin = NULL; pgraph->queryinterface(iid_ivideowindow, (void **)&pvidwin); pvidwin->put_owner((oahwnd)g_hwnd); 비디오윈도우스타일변경 pvidwin->put_windowstyle(ws_child i i d SC WS_CLIPSIBLINGS); SC S
비디오이미지핸드링 비디오의소스를일부만선택가능 HRESULT SetSourcePosition ( long Left, long Top, long Width, long Height ); 비디오의출력위치지정가능 HRESULT SetDestinationPosition ( long Left, long Top, long Width, long Height );
IAMDevMemoryAllocator IAMDevMemoryControlM IAMMediaContent IAMMediaContentEx IAMovieSetup IAMPlayList IAMPlayListItem IAMStreamControl IAMStreamSelect IAsyncReader IBaseFilter IDirectDrawVideo IDistributorNotify IDMOWrapperFilter IEnumFilters IEnumMediaTypes IEnumPins IEnumRegFilters IFileSourceFilter IFilterGraph IFilterGraph2 IFilterMapper IFilterMapper2 IGraphVersion IMediaEvent IMediaEventSink IMediaFilter IMediaPosition IMediaSample IMediaSample2 IMediaStream IMemAllocator IMemInputPinI IMultiMediaStream INonDelegatingUnknown IOverlay IOverlayNotify IPin IQualityControl IQualProp IReferenceClock ISeekingPassThru IStreamSample IVPBaseConfig IVPBaseNotify IVPConfig IVPNotify
필터그래프 DShow 에서접근가능한형태로기본적인가공작업수행 동작 미디어파일읽기미디어파일로부터비디오와오디오신호분리비디오, 오디오신호분석및복원하드웨어로비디오, 오디오신호출력 필터 (Filter) DShow 의모든기능은필터간기능을연결해작동
Base 클래스 %WINCEROOT%\PUBLIC\DIRECTX\SDK\SAMPLES\ DSHOW\BASECLASSES BaseClass.lib lb로생성 프로젝트생성 COM프로젝트로생성 COM 공용함수 (DllRegisterServer, DllUnregisterServer) COM 인터페이스정보 CLSID Base 클래스기반의 User 클래스생성사용가필요한처리작업추가
CMediaSample CMediaType CMemAllocator CMsg CAggDirectDraw CAggDrawSurface CBaseReferenceClock CBaseRenderer CMsg CMsgThread COARefTime COutputQueue CAggDrawSurface CAMEvent CAMMsgEvent CAMSchedule CAMTh d CBaseRenderer CBaseStreamControl CBaseVideoRenderer CBaseWindow CB i A di COutputQueue CPosPassThru CPullPin CQueue CR fti CAMThread CAutoLock CBaseAllocator CBaseBasicVideo CBasicAudio CCritSec CDisp CDispBasic CRefTime CRendererInputPin CRendererPosPassThru CSource CBaseBasicVideo CBaseControlVideo CBaseDispatch CBaseFilter CDispBasic CEnumMediaTypes CEnumPins CFactoryTemplate CSource CSourcePosition CSourceSeeking CSourceStream CBaseInputPin CBaseList CBaseMediaFilter CBaseObject y p CGenericList CGuidNameList CLoadDirectDraw CMediaControl CSystemClock CTransformFilter CTransformInputPin CTransformOutputPin CBaseObject CBaseOutputPin CBasePin CMediaControl CMediaEvent CMediaPosition CTransformOutputPin CTransInPlaceFilter CTransInPlaceInputPin CTransInPlaceOutputPin p CUnknown CVideoTransformFilter FOURCCMap
소스필터 (Source Filter) CSource 클래스 변환필터 (Transform Filter) CTransformFilter 클래스 랜더필터 (Render Filter, Renderer) CBaseRenderer 클래스
IBasicAudio CBasicAudio IBasicVideo CBaseBasicVideo id, CBaseControlVideo IMediaSeeking CPosPassThru, CSourceSeeking IMediaControl CMediaControl IMediaEvent CMediaEvent IVideoWindow d CBaseControlWindow, CBaseVideoWindow. &
고재관 MOBILE DEVICES MICROSOFT MVP
Windows CE 응용프로그램개발기초교육 한국전자산업진흥회 전액국비무료, 24 시간 (4 일 6 시간 / 일 ) http://www.educ.or.kr 모바일단말상용화센터 전액국비무료, 1 주일이내, 현장방문교육실시 대구지역만해당 http://www.mtcc.or.kr
http://www.pdalab.org p// 고재관의커뮤니티 http://myaustin.egloos.com 고재관의블로그 Display, DirectShow, Newsgroup 관련정보 http://msdn2.microsoft.com/en-us/library/bb202047.aspx http://msdn2.microsoft.com/en-us/library/aa929615.aspx http://msdn2.microsoft.com/enmicrosoft com/en-us/library/aa924811.aspxaspx http://msdn2.microsoft.com/en-us/library/aa930379.aspx Microsoft.public.windowsce.app.development Microsoft.public.windowsce.embedded embedded Microsoft.public.windowsce.embedded.vc Microsoft.public.windowsce.platbuilder Microsoft.public.windowsce.targeted.device i t t d d i Microsoft.public.windowsce.testtools