Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何更改Directshow筛选器属性C++;_C++_Visual C++_Directshow - Fatal编程技术网

C++ 如何更改Directshow筛选器属性C++;

C++ 如何更改Directshow筛选器属性C++;,c++,visual-c++,directshow,C++,Visual C++,Directshow,如何以编程方式更改过滤器属性 我正在使用过滤器AAC编码器,我可以在graphedit中手动更改其比特率,方法是右键单击过滤器并输入比特率值 是否可以通过代码执行相同的操作 请给我一些有价值的建议,如果可能的话,请使用代码。您的AAC编码器将通过一些IID公开一些接口。确保获得IID的接口,然后访问它的附加功能,如比特率、采样率等。您可以通过专用过滤器特定的接口执行此操作。您需要参考筛选器文档或SDK以获取有关此()的详细信息。有时,您可以从类型库中获取必要的信息 见: 关于MSDN 与R

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

我正在使用过滤器
AAC编码器
,我可以在
graphedit
中手动更改其
比特率
,方法是右键单击过滤器并输入
比特率

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


请给我一些有价值的建议,如果可能的话,请使用代码。

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

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

见:

  • 关于MSDN

与Roman的答案类似,过滤器的“特殊属性”通常有两种设置和/或保存方式

一种是显示其属性页面“对话框”(isSpecifyPropertyPages),然后允许用户更改并关闭它,然后获得其IPersistStream界面,并保存其“当前状态”,以后可以使用该状态将其属性设置回保存到的位置(graphedit就是这样做的,参考:)此外,您可以通过在图形对象本身上调用IPersistStream将“整个图形”序列化为文件。看

另一种方法是知道“它到底是什么类型的特殊过滤器”,并将其强制转换到您所知道的来自第三方的一些特殊接口,这些接口可能会公开getter和setter等。例如Windows SDK directshow示例中的“avisynth”过滤器公开了ISynth

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


更新:不幸的是,尽管许多过滤器实现了IPersistStream,但似乎很少有人真正使用它来做任何有用的事情……

@selbie我正在构建图表,你知道怎么做吗?您是否有任何示例代码?为了帮助您,我想知道您使用的是哪种AAC编码器。@CPlusSharp它是“VSS AAC Encoder DMO”,因此没有像“枚举所有选项”这样的通用方法。基本上,您要么显示isSpecifyPropertyPages,然后在此之后保留过滤器的设置(参考:),或者必须参考某些第三方筛选器特定接口?没有公开通用属性(尤其是命名属性)的强制筛选器接口。所以过滤器应该实现对开发者有意义的东西。。。而且它似乎取决于供应商。例如,有些可能实现
IPersistPropertyBag
,但这种情况很少。在大多数情况下,它只是一个特定于筛选器的接口。感谢Roman,您的stackoverflow响应是我今天理解dshow的唯一原因:)我发现,当您处理未记录的筛选器时,通过在graphedit或graphbuilder中打开过滤器属性,然后查看interfaces选项卡,可以看到它实现了哪些接口。我认为这是一个很好的起点,可以在谷歌上搜索更多关于这些接口的信息,并学习如何使用它们。