Delphi XE と DSPack 2.3.3 を使用しています。Webcam キャプチャを使用してデスクトップ アプリケーションを維持しています。ユーザーは、訪問者やドキュメントの写真をキャプチャできます。すべてが正常に機能しています。最大の顧客の 1 人が Citrix 7.13 に移行しており、Web カメラがフリーズしています。
彼らのサポートは Citrix に連絡しました。Citrix エンジニアリングは、アプリケーションが IMediaFilter::SetSyncSource メソッドを呼び出して、Web カメラのキャプチャに関するコード内のフィルター グラフに「参照クロック」を明示的に設定しているかどうかを知りたがっています。私はいくつかのテストを行いましたが、実際にはレンダリングが開始されたときに呼び出しがあります。DSPack デモ「VideoCap」を実行すると、呼び出しが表示されます。
// now render streams
with CaptureGraph as IcaptureGraphBuilder2 do
begin
// set the output filename
SetOutputFileName(MEDIASUBTYPE_Avi, PWideChar(CapFile), multiplexer, Writer);
// Connect Video preview (VideoWindow)
if VideoSourceFilter.BaseFilter.DataLength > 0 then
RenderStream(@PIN_CATEGORY_PREVIEW, nil, VideoSourceFilter as IBaseFilter,
nil , VideoWindow as IBaseFilter);
// Connect Video capture streams
if VideoSourceFilter.FilterGraph <> nil then
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter,
nil, multiplexer as IBaseFilter);
// Connect Audio capture streams
if AudioSourceFilter.FilterGraph <> nil then
begin
RenderStream(nil, nil, AudioSourceFilter as IBaseFilter,
nil, multiplexer as IBaseFilter);
end;
end;
CaptureGraph.Play;
DSpack ソース コメントによると:
{ The reference clock has changed. The filter graph manager sends this event
when its IMediaFilter.SetSyncSource method is called.}
property OnGraphClockChanged: TNotifyEvent read FOnGraphClockChanged write FOnGraphClockChanged;
実際、OnGraphClockChanged は CaptureGraph.Play が呼び出された後に発生します。
SetSyncSource の呼び出しを避けることは可能ですか? これがこの問題を解決するかどうか知っていますか?
ティア、クレマン