请教DShow AgreeMediaType函数协商两次
AgreeMediaType里进行媒体协商时,为什么会取得两次IEnumMediaType.
按照我的理解,协商一次就好。
1.比如A和B协商。A为output,B为Input。A支持的类型为1,2,3. B支持的类型为2,3。
那么按照代码首先得到B的媒体类型枚举器,接下来枚举所有的媒体类型,和B进行连接。假设得到媒体类型2,类型匹配。接下来的步骤连接成功,完成。按照这个思路,根本不需要AgreeMediaType里面的第二部分获取output端即A端的枚举类型。
2.假设A和B协商。A为output,B为Input。A支持的类型为1,2,3. B支持的类型为4,5。
那么按照这个思路,首先得到的B的枚举类型,4,5应该不成功。
第二次得到的是Output端即A端的媒体类型,1,2,3,应该也不会成功。
所以我的理解是建立连接双方所支持的类型“交集[b][/b]”不为空才可以连接成功。而且只需要一次连接就可以,为什么还需要两次呢?
如果我的理解有误,烦请不吝赐教。
拜谢!!!
[解决办法]
我认为问题在于有的filter支持所有的媒体类型,比如像Tee Filter,它是的支持类型为NONE,用它的枚举器是得不到确定的媒体类型,所以这时就需要从另一个Pin去枚举类型了。
[解决办法]
会不会存在这种情况:上半部分连接不成功,下半部分可以呢?
--------------------------
我在一楼举的例子就是这种情况。
如果上半部分就连接成功了,程序就直接返回了,不会进入下半部分。