看dx里dshow的例子和别人的程序,用IFilterGraph::AddFilter()这个API添加filter到Graph的时候,第二个参数是一个设备友好名称;
我看有的填的是通过IPropertyBag:read方法得到的FriendlyName参数,这个好理解;但是有的则直接填入诸如"Capture
Video","Source"之类的字符串,实在无法理解,因为这些根本不是设备的FriendlyName,这可以是一个in输入参数啊?
包括陆其明的书和dshow的例子都没有对这个问题阐述过,只是随便填的。
后来查到MSDN才了解,翻译了一下:
第二个参数filter的名称可以是NULL,在这种情况下filter graph manager将产生一个名字。
如果该参数不为NULL,且不是唯一的,AddFilter函数将修改这个(你填入的)名字,且尝试产生一个唯一的名字;如果成功,
返回VFW_S_DUPLICATE_NAME,否则返回VFW_E_DUPLICATE_NAME。
上面的粗体字说明了, 填入"Capture Video","Source"之类是没用的;实际修改playcap的例子,改为AddFilter(pSrcFilter, L"XXX");
,应用程序也不会有任何变化。
http://blog.csdn.net/cosmoslife/article/details/8031504