函数PVPlayerEngine::HandleSourceNodeQueryTrackSelIF(PVPlayerEngineContext& aNodeContext, const PVMFCmdResp& aNodeResp)
1)根据上层命令的返回状态,进入函数DoSourceNodeQueryInterfaceOptional(aNodeContext.iCmdId, aNodeContext.iCmdContext)
2)RunIfNotReady()运行调度,函数退出;
函数PVPlayerEngine::DoSourceNodeQueryInterfaceOptional(PVCommandId aCmdId, OsclAny* aCmdContext)
此函数连续6次调用iSourceNode->QueryInterface,每个QueryInterface都对应不同的UUID,context
分别是:
PVMF_TRACK_LEVEL_INFO_INTERFACE_UUID,iSourceNodePVInterfaceTrackLevelInfo(没有查询到相应接口)
PvmfDataSourcePlaybackControlUuid,iSourceNodePVInterfacePBCtrl(成功)
PvmfDataSourceDirectionControlUuid,iSourceNodePVInterfaceDirCtrl(失败)
KPVMFMetadataExtensionUuid,iSourceNodePVInterfaceMetadataExt(成功)
PVMI_CAPABILITY_AND_CONFIG_PVUUID,iSourceNodePVInterfaceCapConfig(失败)
PVMF_DATA_SOURCE_NODE_REGISRTY_INIT_INTERFACE_UUID,iSourceNodePVInterfaceRegInit(失败)
函数的作用就是根据命令的类型将查询到的接口指针保存到引擎中去,而本函数是对可选的接口进行处理的;
3)完成上面的接口查询命令则整个添加数据源的操作就算完成了;
添加数据源的命令完成后就会调用到函数PVPlayer::run_init(status_t s, void *cookie, bool cancelled)