如何更改Directshow过滤器属性C ++

时间:2012-12-27 05:58:23

标签: c++ visual-c++ directshow

如何以编程方式更改过滤器属性?

我正在使用过滤器AAC encoder,我可以通过右键单击过滤器并输入bitrate值来手动更改graphedit中的bitrate

是否可以通过代码执行相同操作?

请提供宝贵的建议,如果可能,请提供代码。

3 个答案:

答案 0 :(得分:2)

您可以通过专用过滤器专用接口执行此操作。您需要参考过滤器文档或SDK以获取有关此内容的详细信息(VSS Tech Support)。有时您可以从类型库中获取必要的信息。

请参阅:

答案 1 :(得分:1)

您的AAC编码器将通过某些IID暴露某些界面。确保你获得了IID的接口,然后访问其他功能,如比特率,采样率等。

答案 2 :(得分:0)

类似于罗曼的答案,似乎有两种方式可以过滤掉特殊属性"通常是设置和/或保存。

一个是显示其属性页面"对话框" (ISpecifyPropertyPages),然后允许用户更改并关闭它,然后您获得其IPersistStream接口,并保存其当前状态"然后你可以使用它来基本上将它的属性设置回它们保存到的内容(这就是graphedit的用法,参考:http://microsoft.public.multimedia.directx.dshow.programming.narkive.com/ldOko8Js/ispecifypropertypages-saving-and-restoring-settings)此外,你可以序列化整个图形"通过在图形对象本身上调用IPersistStream来获取文件。见https://stackoverflow.com/a/11781370/32453

另一种方法是确切地知道它是什么类型的特殊过滤器"并将其投射到您所知道的某个特殊界面,来自第三方,这可能会暴露出吸气剂和制定者等,例如" avisynth"来自Windows SDK directshow示例的过滤器公开了ISynth interface

另请参阅here,其中列出了一些明显的方法...... here似乎也相关。 IPersist本身也有多个继承它的接口,请参阅注释here。到目前为止,根据我对dshow设备的经验,它们通常只实现IPersist和IPersistStream(以及IAMSpecificPropertyPages),尽管你也可以自己为其他常见接口保存值(比如IAMVideoProcAmp),然后手动重新设置属性......

更新:遗憾的是,虽然许多过滤器实现了IPersistStream,但似乎很少有人真正将它用于任何有用的东西......