2012-12-27 51 views
2

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

我使用的是过滤AAC encoder,我可以手动在滤膜上右击改变其在grapheditbitrate并输入bitrate值。

是否有可能通过代码做同样的事情?

请给我宝贵的建议,如果可能的话与代码。

+0

@selbie我建立的图形,你知道该怎么办呢?你有没有任何示例代码? –

+1

为了帮助你,编号将很高兴知道您正在使用的AAC编码器。 – CPlusSharp

+0

@CPlusSharp它是“VSS AAC编码器DMO” –

回答

1

您的AAC编码器将通过某些IID公开某些接口。确保你获得了IID的接口,然后访问其比特率,采样率等附加功能。

2

您可以通过专用过滤器专用接口来完成此操作。您需要参阅过滤器文档或SDK以获取有关详细信息(VSS Tech Support)。有时你可以从类型库中获得必要的信息。

参见:

+0

所以没有像“枚举所有选项”一样的通用方式,基本上你必须显示一个ISpecifyPropertyPages然后在此之后坚持过滤器的设置(参考:http://microsoft.public。 multimedia.directx.dshow.programming.narkive。com/ldOko8Js/ispecifypropertypages-saving-and-restoring-settings),还是必须引用一些第三方过滤器特定的接口? – rogerdpack

+1

没有必要的过滤器接口公开通用属性,特别是,命名。所以过滤器应该为开发人员实现一些有意义的东西......并且它似乎与供应商有关。例如,有些人可能会实现'IPersistPropertyBag',但很少见。在大多数情况下,它只是一个过滤器特定的界面。 –

+0

感谢罗马,你的stackoverflow响应是我今天理解dshow的唯一原因:) – rogerdpack

0

罗马的答案相似,似乎有一个过滤器的 “特殊性质” 通常设置两种方式和/或保存。

一个是显示它的属性页面“对话框”(ISpecifyPropertyPages),然后允许用户改变东西并关闭它,然后你得到它的IPersistStream接口,并保存它的“当前状态”,然后你可以使用以后基本上将它的属性设置回它们保存的内容(这是如何绘制的,参考:http://microsoft.public.multimedia.directx.dshow.programming.narkive.com/ldOko8Js/ispecifypropertypages-saving-and-restoring-settings)另外,可以通过在图形对象本身上调用IPersistStream将“整个图形”序列化为文件。请参阅https://stackoverflow.com/a/11781370/32453

另一种方法是知道“它到底是什么类型的特殊过滤器”,并将其转换为您知道的特定接口,来自第三方,可能会暴露获取器和设置器等,如Windows SDK中的“avisynth”过滤器directshow示例公开了ISynth interface

另请参阅here其中列出了几种更明显的方式... here也似乎相关。 IPersist本身也有多个从它继承的接口,请参阅注释here。根据我对dshow设备的经验,他们通常仅实现IPersist和IPersistStream(和IAMSpecificPropertyPages),尽管您也可以为其他常用接口保存值(如IAMVideoProcAmp),然后手动重新设置属性...

更新:不幸的是,虽然许多过滤器实现IPersistStream接口,似乎很少有人真正使用它的有用的东西......