2012-04-11 2 views
2

저는 Micrsoft Media Foundation을 통해 모든 유형의 웹캠에서 이미지를 캡처하기 위해 C++ 인터페이스로 작업 해 왔습니다. 이미 여러 종류의 웹캠에 연결할 수있는 코드가 있으며 다양한 해상도와 형식으로 이미지를 캡처 할 수 있습니다.Microsoft Media Foundation 웹캠 인터페이스

WinXP에서는 Direct Show 라이브러리를 사용하여 웹캠의 다양한 매개 변수 (예 : 화이트 밸런스, 노출 시간 등)를 변경할 수 있음을 알고 있습니다. 유감스럽게도 웹캠에서 단일 프레임을 쉽게 캡처 할 수있게 해주는 Direct Show 라이브러리의 인터페이스는 Win7의 Direct Show에서 제거되었습니다. 아무도 내가 Microsoft Media Foundation 또는 Microsoft Media Foundation과 결합 할 수있는 다른 라이브러리를 사용하여 이러한 매개 변수에 액세스 할 수있는 방법을 알고 있습니까?

답변

0

DirectShow은 여전히 ​​Windows 7에서 좋습니다 (가장 쉬운 검사는 Windows SDK의 GraphEditAMCap입니다). 그러나 Media Foundation은 이전 버전의 Windows에서는 필수적인 지원이 부족합니다.

+0

OP (내 MF 프로그램의 제어 카메라)와 정확히 같은 질문으로 여기에 왔으며 기본적으로 "DirectShow를 사용해야합니다."라고 대답했습니다. 받아 들일 수 없기 때문에 -1 제게는 – YePhIcK

+0

@YePhIcK : 문서화 된 기능을 유지하려면 "DirectShow를 사용해야합니다"- 대답은 여전히 ​​현재 양호한 상태입니다. –

+0

나는 아래에 게시 한 답변의 코드를 사용하고 있으며 예상대로 작동하고 있기 때문에 논쟁하지 않을 것입니다. 그래프 또는 필터로 피딩 할 필요가 없습니다 (모두 후드 아래에 있음). 내 코드는 혼란을 야기 할 수있는 DirectShow가없는 일반 MF 코드처럼 보인다. – YePhIcK

0

IAMCameraControl과 IANVideoProcAmp는 여전히 Windows 8에서 화이트 밸런스, 팬, 줌을 지원합니다. 카메라 컨트롤은 지금까지 MFT의 일부가 아닙니다. 우리는 이러한 작업을 직접 수행해야합니다.

2

WMF에서 DirectShow QueryInterface 메서드를 호출 할 수 있습니다. 예제 코드는 Windows Media Foundation: Controlling Camera Properties입니다. 이것은 당신이 이러한 작업을위한 특정 인터페이스 를 정의하지 않습니다 미디어 재단을 밝혀 등에 초점과 화이트 밸런스

HRESULT CMFVideoCaptureDlg::SetupCamera(IMFMediaSource* pCameraSource) { 
    CComQIPtr<IAMCameraControl> spCameraControl(pCameraSource); 
    HRESULT hr = S_OK; 
    if(spCameraControl) { 
     long min, max, step, def, control; 
     hr = spCameraControl->GetRange(CameraControl_Exposure, &min, &max, &step, &def, &control); 
     if(SUCCEEDED(hr)) 
      hr = spCameraControl->Set(CameraControl_Exposure, 1, CameraControl_Flags_Manual); 
    } 
    CComQIPtr<IAMVideoProcAmp> spVideo(pCameraSource); 
    if(spVideo) 
     hr = spVideo->Set(VideoProcAmp_WhiteBalance, 0, VideoProcAmp_Flags_Auto); 
    return hr; 
} 

같은 가능한 카메라 매개 변수를 설정할 수 있습니다. 흥미롭게도, 그것은 의해 정의 된 인터페이스를 구현 전작 DirectShow에서 해당 미디어 소스는 비디오 카메라

+0

가장 관련있는 부분을 여기에 복사하여 붙여 넣을 수 있습니까? 코드/링크에 액세스 할 수 없습니다. ATM (HTTP 500 제공) :( – YePhIcK

0

This article 다음 코드를 가지고 있으며, 그와 같은 동작을 인합니다 ( IMFMediaSource 인터페이스로 표시)는 미디어 소스에 매력!


HRESULT CMFVideoCaptureDlg::SetupCamera(IMFMediaSource* pCameraSource) { 
    CComQIPtr spCameraControl(pCameraSource); 
    HRESULT hr = S_OK; 
    if(spCameraControl) { 
     long min, max, step, def, control; 
     hr = spCameraControl->GetRange(CameraControl_Exposure, &min, &max, &step, &def, &control); 
     if(SUCCEEDED(hr)) 
      hr = spCameraControl->Set(CameraControl_Exposure, 1, CameraControl_Flags_Manual); 
    } 
    CComQIPtr spVideo(pCameraSource); 
    if(spVideo) 
     hr = spVideo->Set(VideoProcAmp_WhiteBalance, 0, VideoProcAmp_Flags_Auto); 
    return hr; 
} 
관련 문제