2012-04-11 60 views
2

私は、Micrsoft Media Foundationを介してあらゆるタイプのウェブカメラからの画像をキャプチャするためのC++インターフェイスを開発してきました。私はすでにいくつかのタイプのウェブカメラに接続できるコードをいくつか用意しており、さまざまな解像度とフォーマットで画像をキャプチャすることができます。Microsoft Media Foundation Webcam Interface

WinXPでは、ダイレクトショーライブラリを使用して、ウェブカメラのさまざまなパラメータ(ホワイトバランス、露出時間など)を変更することができます。残念ながら、Webカメラから単一のフレームを簡単にキャプチャすることを可能にした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の一部ではありません。これらを実行するにはDirect Showを使用する必要があります。

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; 
} 
関連する問題