|
흑흑... 힘겹게 성공했습니다. 오~ 감격~
데브피아에서 많은 도움을 받았습니다.
아래는 버튼 클릭 이밴트에서 처리한 내용입니다.
default로 320x240 크기를 640x480 크기로 설정하는 것입니다.
HRESULT hr = -1;
ICaptureGraphBuilder2 *Graph = NULL;
IBaseFilter *SourceFilter = NULL;
FilterGraph->Stop();
CheckDSError(FilterGraph->QueryInterface(IID_ICaptureGraphBuilder2, &Graph));
CheckDSError(Filter->QueryInterface(IID_IBaseFilter, &SourceFilter));
// IAMStreamConfig 형의 인터페이스를 얻어옴.. 이거 알아내는데 힘들었음... ㅡㅡ;;
IAMStreamConfig *pSC;
Graph->FindInterface( &PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video,
SourceFilter,
IID_IAMStreamConfig,
(void **)&pSC);
// 데이터들을 설정한다. 현재 화면 크기를 640x480으로 하려고한다.;;
VIDEOINFOHEADER vih;
::ZeroMemory(&vih, sizeof(VIDEOINFOHEADER));
::ZeroMemory(&vih.bmiHeader, sizeof(BITMAPINFOHEADER));
vih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
vih.bmiHeader.biWidth = 640;
vih.bmiHeader.biHeight = 480;
vih.bmiHeader.biPlanes = 1;
vih.bmiHeader.biBitCount = 24;
vih.bmiHeader.biCompression = 0;
vih.bmiHeader.biSizeImage = 640*480*3; //UDIBSIZE(vih.bmiHeader);
vih.AvgTimePerFrame = 10000000 / 17;
AM_MEDIA_TYPE type;
type.majortype = MEDIATYPE_Video;
type.subtype = MEDIASUBTYPE_RGB24;
type.bFixedSizeSamples = TRUE;
type.bTemporalCompression = FALSE;
type.lSampleSize = vih.bmiHeader.biSizeImage;
type.formattype = FORMAT_VideoInfo;
type.pUnk = NULL;
type.cbFormat = sizeof(VIDEOINFOHEADER);
type.pbFormat = (PBYTE) &vih;
// 설정을 적용한다. ;;
hr = pSC->SetFormat(&type); // StreamConfig is interface
FilterGraph->Play();
Graph->Release();
SourceFilter->Release();
우리 님이 쓰신 글 :
: 안녕하세요 매번 질문만 드려서 죄송하네요..
:
: 현재 DSpack 을 이용하여 USB 웹켐영상을 받아오고, CAPTURE 하고, 사진으로 저장하기 까지 했습니다.
:
: 그런데 CAPTURE SIZE를 조절하고 싶은데 영 잘 안되네요..
:
: 드라이버에서 지원하는 켑춰설정 팝업창을 보이도록하고 이곳에서 SIZE를 조절하는것은 되거든요.
:
: 그런데 그런거 사용안하고 직접 명령어를 날려서 SIZE를 조절하고 싶은데 여기저기 외국싸이트까지 다 찾아봐도
:
: VC++ 관련자료나 델파이는 많이 있는데 그걸 BUILDER 에 적용하려니 잘 안되네요..ㅠ.ㅠ
:
: 누가 좀 알려주세요~
:
: 관련 소스 코드는 아래와 같습니다.
:
:
:
: CheckDSError(Filter->QueryInterface(IID_IBaseFilter, &SourceFilter));
: TPinList *PinList = new TPinList(SourceFilter) ;
:
: VIDEOINFOHEADER vih;
: ::ZeroMemory(&vih, sizeof(VIDEOINFOHEADER));
: ::ZeroMemory(&vih.bmiHeader, sizeof(BITMAPINFOHEADER));
: vih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
: vih.bmiHeader.biWidth = 640;
: vih.bmiHeader.biHeight = 480;
: vih.bmiHeader.biPlanes = 1;
: vih.bmiHeader.biBitCount = 24;
: vih.bmiHeader.biCompression = 0;
: vih.bmiHeader.biSizeImage = 640*480*3; //UDIBSIZE(vih.bmiHeader);
: vih.AvgTimePerFrame = 10000000 / 17;
:
: AM_MEDIA_TYPE type;
: type.majortype = MEDIATYPE_Video;
: type.subtype = MEDIASUBTYPE_RGB24;
: type.bFixedSizeSamples = TRUE;
: type.bTemporalCompression = FALSE;
: type.lSampleSize = vih.bmiHeader.biSizeImage;
: type.formattype = FORMAT_VideoInfo;
: type.pUnk = NULL;
: type.cbFormat = sizeof(VIDEOINFOHEADER);
: type.pbFormat = (PBYTE) &vih;
:
: hr = ((IAMStreamConfig *)(PinList->First()))->SetFormat(&type);
:
: 여기에서 IAMStreamConfig 로의 형 변환이 안되고 컴파일 시 error가 나더라고요.
:
: 여기 게시판에서도 찾아보니 IAMStreamConfig 로의 형 변환이 델파이는 잘 되는데 빌더는 잘 안된다고
:
: 나와있더라고요..
:
: 고수님들 부탁드립니다.~~
|