2010-11-30 12 views
2

私は複雑な問題を抱えています。私のプログラムは、物理的な実験(例えば、揺れ動く動き)を分析するためにウェブカメラを使用する派生的なソフトウェアです。私は時間を使用しない場合は、単に カウント、ウェブカメラの時間の不正確、露出時間の設定

  • プロセッサがビジー状態の場合、時間 測定は、(ISampleGrabberCB.BufferCB(サンプル時間)) 不正確である
  • :私はfolowingsを経験してきましたサンプル:0,1,2 ...それは より良いと見えます。私は動きのカーブで を見るとこれを知覚します。

私の主な目標は不正確さを減らすことです。私はFPS(これはビジーなプロセッサーを引き起こす)の制限で達成しようとしています。

  • 私のウェブカメラ(インテルクラスメイトPCのウェブカメラで 建て)自動FPSと露出 時間を持っています。照明によっては、 が変動します。
  • IAMStreamConfig.AvgTimePerFrameは効果がありません。
  • IAMCameraControlはウェブカメラでサポートされていません。
  • IKsPropertySet: ウェブカメラのサポートがないため、 の使用方法がわかりません。この 例では、彼らは、ロジクール ウェブカメラのためにそれを使用することができます。http://social.msdn.microsoft.com/Forums/en/windowsdirectshowdevelopment/thread/47b1317d-87e6-4121-9189-0defe1e2dd44

答えて

1

Time and Clocks in DirectShow上のMSDNの記事から:

IReferenceClockインターフェイスが基準クロックとして使用することができますサポートする任意のオブジェクトを。ハードウェアタイマーにアクセスできるフィルタはクロック(オーディオレンダラの例)を提供できます。または、フィルタグラフマネージャはシステム時刻を使用するフィルタを作成できます。

フィルタからIReferenceClockを使用しようとしたことはありませんが、必要な高解像度クロックが提供されない可能性があります。

このSO post on high resolution timersが必要な場合があります。

IAMStreamConfig.AvgTimePerFrameは情報提供のためのもので、調整を試みても効果はありません。これは、ビデオストリームの平均フレームレートを計算できる値です。

VIDEOINFOHEADER* pVih = (VIDEOINFOHEADER*)m_MediaTypes.VideoType.pbFormat; 

if(pVih) 
    int nFrameRate = (int)((double) (10000000.0f/pVih->AvgTimePerFrame)); 
+0

お返事ありがとうございました。私は別の高いresulotionタイマーを試しましたが、これは私の問題を解決しません。私はサンプルの正確な時間が必要で、他の瞬間の正確な時間を が知っていれば助けにならない。 IReferenceClockを実装してグラフに構築すると、私には何かが必要ですか? (同じ理由ではないと思います) IAMStreamConfig.AvgTimePerFrame:AvgTimePerFrameの値を変更することができます。これは他のウェブカメラでも動作しますが、これでは動作しません。インテルClassmate PCに私のプログラム を最適化しなければならないので、このハードウェアで作業する必要があります。 – bsebi

関連する問題