TVideoWindowに表示せずにDelphi/DSPackを使用してフレームをキャプチャする方法は?

StackOverflow https://stackoverflow.com//questions/12680600

  •  12-12-2019
  •  | 
  •  

質問

DSpackには、DirectShow互換のビデオデバイスを再生し、ビデオフレームを同時にキャプチャするためのコード例があります。FiltergraphにはTVideoWindowが添付されており、ビデオを表示します(Firgure-1)。TVideoWindowを削除すると、オペレーティングシステム(Windows)が自動的にActiveMovieを起動し、別のウィンドウにビデオを表示します(図-2)。

Guiコンポーネントを使用せずにビデオを表示せずにビデオフレームをキャプチャするためにDSPackを使用する方法はありますか?

DSPack forumにはNullRenderer filterについていくつかの言及がありますが、その使用方法に関するドキュメントや例はありません。GraphEditで直接ビデオレンダラーをNull Renderに手動で置き換えると、それを達成できるように見えます(図-3)。

コード内ですべての操作を行うことで、図3に示す結果をどのように達成できますか?DSPackでは、Nullレンダラーの作成方法については説明していません。

Figure-1: The graph of the default example code

Figure-1

Figure-2: Shows what happens if I remove the TVideoWindow

Figure-2

Figure-3: Shows what happens if I replace Video Renderer with a 
         Null Renderer and manually connect them in the GraphEdit. 

Figure-3

これは私がやってしまったことです(これまでのところ)

次のように呼び出します ReassignSampleGrabberOutput 直前 filterGraph.Play;

procedure TForm1.ReassignSampleGrabberOutput;
var
  nullRenderer : IBaseFilter;
  nullRendererPins: IEnumPins;
  nullRendererPin : IPin;
  graph:   IGraphBuilder;
begin

  nullRenderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;
  FilterGraph1.QueryInterface(IID_IGraphBuilder, graph);
  graph.AddFilter(nullRenderer, 'Null Renderer');

  nullRenderer.EnumPins(nullRendererPins);

  nullRendererPins.Reset;

  if nullRendererPins.Next(1, nullRendererPin, nil) = S_OK then
  begin
    //SampleGrabber1.OutPutPin.Disconnect;
    //SampleGrabber1.OutPutPin.Connect(nullRendererPin, nil);

    graph.Disconnect(SampleGrabber1.OutPutPin);
    graph.FindFilterByName('Video Renderer', filter);
    graph.RemoveFilter(filter);
    graph.Connect(SampleGrabber1.OutPutPin, nullRendererPin);

  end;
end;
役に立ちましたか?

解決

Null Renderer Filter は標準のフィルタ/クラスです。コードでは、インスタンス化するだけです(CoCreateInstance)、それをグラフに追加し、その入力ピンをサンプルグラバーの未接続の出力ピンに接続します。

Delphi/DSPackでは、次のようになります:

Renderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top