-
DirectShow를 이용하여 카메라 동영상을 mp4로 캡쳐해 보자~
위의 그림은 동영상을 캡쳐 하기 위한 필터 그래프이다.사실 위 그림만으로 모든것이 설명이 되지만 ..그래도 혹시 내가 잊어버릴까봐 부가설명을 ;; // GraphBuilder와 CaptureGraphBuilder2를 생성한다.// 비디오 캡쳐를 위해서는 일반적으로 CaptureGraphBuilder2를 이용하는것 같다. (amcap예제 참고) RETURNIF(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)); RETURNIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&m_videoRecGraph)); RETURNIF(CoCreateInstance (CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **) &m_vCapBuilder2)); CoUninitialize(); /* 위의 필터 그래프대로 필터들을 생성하고 graph에 추가해 준다. 여기서 사용한 mp4 writer필터는 공개된 […]
-
[Directshow] Introduction to DirectShow Application Programming
DirectShow 공부를 좀 해야겠다.이제 하려는 Project가 DirectShow를 기반으로 동작하여 동영상 편집등등을 하는데 기본지식없이 하는건 무리같다.DirectShow와 응용프로그램의 관계DirectShow에서 말하는 소프트웨어 컴포넌트들을Filter라고 부른다.그 필터의 종류에는 여러가지가 있고 직접 만들수도 있다.필터의 예 )read filesget video from a video capture devicedecode various stream formats, such as MPEG-1 videopass data to the graphics or sound cardAVI 파일을 열었을때의 모습이다.File Source […]
-
[DShow] 여러가지 주저리..
[[[[ 이글은 제가 AVI파일을 DirectShow로 재생하면서 경험한 일을 그냥 두서없이 적은글입니다…. ]]]]AVI 를 재생하기위한 Source Filter들.. 1. AsyncReader와 FileSourceFilter + AVISplitter (CLSID_AsyncReader, CLSID_AviSplitter) Direct Show의 기본.. 단점은 불완전한 파일에 대해서 재생불가.. 열려있는 파일이 재생이 되었던가..?-_- 2. AVIFile-based reader Filter (CLSID_AVIDoc) 아래것의 기본이 되는 필터인듯하다. 하지만, 임의의 AVI파일의 사운드가 들리지 않는 현상이 발생한다. 그래프 에디터로 확인시 연결은 잘되어있지만.. 재생시에 에러리턴.. 추측이지만.. VFW를 기본으로 사용하고.. 오디오가 VBR인경우 인식을 […]
-
[Dshow] 연결된 필터 이름 알아오기
관련 Site에서 간단하게 도움을 받아서 작성한 Function입니다.* Wince에서 NullPlayer를 작성하여 OS에서 연결되는 Filter 정보를확인하고자 하여 아래 함수를 작성하였습니다.코드 :HRESULT GetConnectFiltersName( IGraphBuilder *pGraph ){ IEnumFilters *pEnumFilter = NULL; HRESULT hr = pGraph->EnumFilters( &pEnumFilter ); IBaseFilter *pBaseFilter = NULL; FILTER_INFO stFilterInfo; while( S_OK == pEnumFilter->Next( 1, &pBaseFilter, NULL ) ) { pBaseFilter->QueryFilterInfo( &stFilterInfo ); char sztmp[256]; ::WideCharToMultiByte(CP_ACP, 0, stFilterInfo.achName, -1, sztmp, 256, NULL, […]
-
[Dshow] DirectShow Filter Build시 발생하는 Link Error 해결방법
[Dshow] DirectShow Filter Build시 발생하는 Link Error 해결방법Programming/DirectShow2008/03/11 18:11Some of the DirectShow samples break if you install Visual Studio 2005 Beta 2. Most of the errors that I found fall into three categories:C4430: Missing type specifier. To conform with C++, undeclared types do not default to int. All types must be declared. Fix: Declare the […]
-
프로젝트 제안서
-
Dshow 구조도
DirectShow 기술을 사용하여 필터를 개발하는데 조금이나마 도움이 되었으면 좋겠네요모든 baseclass에 대한 클래스 다이어그램은 아니지만,,,일반적으로 많이 사용되는 클래스에 대해 정리해 보았습니다… < 필터 관련 클래스 > < 핀 관련 클래스 >
-
BITMAPINFO
typedef struct tagBITMAPINFO{ BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1];} BITMAPINFO, *PBITMAPINFO; ///////////////////////////////////////////////////////////////////// static BITMAPINFO *pbmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + (sizeof(RGBQUAD)*256)); pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = px_width; pbmi->bmiHeader.biHeight = px_height; pbmi->bmiHeader.biPlanes = 1; pbmi->bmiHeader.biBitCount = 24; pbmi->bmiHeader.biCompression = BI_RGB; pbmi->bmiHeader.biSizeImage = px_width * px_height; pbmi->bmiHeader.biXPelsPerMeter = 0; pbmi->bmiHeader.biYPelsPerMeter = 0; pbmi->bmiHeader.biClrUsed = 0; pbmi->bmiHeader.biClrImportant = 0; // 컬러 세팅 for (i=0; i<256; ++i) { pbmi->bmiColors[i].rgbRed = i; pbmi->bmiColors[i].rgbGreen = i; pbmi->bmiColors[i].rgbBlue = i; pbmi->bmiColors[i].rgbReserved […]