采用GMF GDCL MPEG 4 Mux滤波器的GMFBridge

时间:2011-05-30 15:09:46

标签: directshow

我尝试将GDCL MPEG 4 Mux与GMFBridge一起使用。

我原来的图表是:

SourceFilter ---> GDCL MPEG 4 Mux Filter ---> FileWriter

我想根据我的特殊标准(例如时间,例如每五分钟)给出新的文件名,但不想再次创建整个图形。所以我尝试使用GMFBridge。

我不行。我真的无法弄清楚如何使用GMFBridge或它不起作用。

注意:以下是我对GMFBridge的处理方式

为了使用,我将我的图分成两部分:

FirstPart ==>  SourceFilter---> GDCL MPEG 4 Mux Filter--> BridgeSinkFilter

SecondPart ==> BridgeSourceFilter ---> FileWriter 

我的程序伪代码

IGraphBuilder firstPartGraph = (IGraphBuilder) new FilterGraph();
IGraphBuilder secondPartGraph =  (IGraphBuilder) new FilterGraph();

IBaseFilter   bridgeSinkFilter;
IBaseFilter   bridgeSourceFilter;

IBaseFilter   sourceFilter;
IBaseFilter   muxerFilter;
IBaseFilter   fileWriterFilter;


// Create bridge controller  and init
IGMFBridgeController bridge = (IGMFBridgeController)new GMFBridgeController();

bridge.AddStream(true,eFormatType.MuxInputs, true);

// Then insert Sink filter

bridge.InsertSinkFilter(firstPartGraph, bridgeSinkFilter);

// Configure first part filters


firstPartGraph.AddFilter(sourceFilter);
firstPartGraph.AddFilter(muxerFilter);
firstPartGraph.AddFilter(bridgeSinkFilter); // Have to add this??

ConnectFilters(firstPartGraph,sourceFilter,muxerFilter);
ConnectFilters(firstPartGraph,muxerFilter,bridgeSinkFilter);


// Now add bridge sourceFilter

bridge.InsertSourceFilter(bridgeSinkFilter,secondPartGraph,bridgeSourceFilter);

 // Then configure second part graph


secondPartGraph.AddFilter(bridgeSourceFilter); // Have to add this??
secondPartGraph.AddFilter(fileWriterFilter);

ConnectFilters(secondPartGraph,bridgeSourceFilter,fileWriterFilter);


 // Now bridge two graphs

 bridge.BridgeGraphs(bridgeSinkFilter,fileWriterFilter,bridgeSourceFilter);


// Execute both graphs

 IMediaControl mediaControlForPartOne = (IMediaControl)firstPartGraph;
 mediaControlForPartOne->Run(); 

 IMediaControl mediaControlForPartSecond = (IMediaControl)secondPartGraph;
 mediaControlForPartSecond->Run();

现在如何停止第二个图形部分并设置新文件名,然后使用bridge重新连接图形?

修复IT:

感谢。

我只是改变了我的grapg divison并且正在工作:

  FirstPart ==>  SourceFilter--> BridgeSinkFilter
  SecondPart ==> BridgeSourceFilter ---> GDCL MPEG 4 Mux Filter---> FileWriter 

2 个答案:

答案 0 :(得分:3)

你需要放置多路复用器和放大器。第二个图中的文件编写器。有两个原因。首先,mux和文件编写器之间的流量包括自定义接口,而不仅仅是标准的IMemInputPin协议(允许在图形停止后终止标头),其次,它是你要停止以便关闭文件的多路复用器,而不是文件编写者。

所以,在第一个图表中输入,在第二个图表中使用mux =>文件编写器,你应该没问题。

答案 1 :(得分:1)

如果您有两个图表,并在第二个图表中获得正确的输出;你可以断开图表:

BridgeGraphs(NULL, NULL);

现在您可以停止第二个图表,删除它并创建一个新图表。启动新图表,然后重新连接:

BridgeGraphs(bridgeSinkFilter, newBridgeSourceFilter);
相关问题