函数PVPlayerEngine::DoSourceNodeTrackSelection(PVCommandId /*aCmdId*/, OsclAny* /*aCmdContext*/)
注意与上面的DoSinkNodeTrackSelection的异同
1)调用函数DoTrackSelection(true, false),参数的含义:oPopulatePlayableListOnly,oUsePreferenceList;将iSourcePresInfoList中有关源文件的数据传递到iPlayableList
函数PVPlayerEngine::DoTrackSelection
1)如果参数oPopulatePlayableListOnly为真,则将iSourcePresInfoList(包含当前文件信息)的内容传递到iPlayableList中,
2)循环iDatapathList,将其iTrackInfo清空,
3)如果DecNode已经构建,调用函数DoVerifyTrackInfo(iTrackSelectionList[i], curtrack, checkcodec)确认当前track的参数,如果函数返回成功,将当前track加到iPlayableList的成员量iTrackInfoVec中;
4)函数返回
这个函数有参数的真假有很大关系,整理时还要细看;
函数PVPlayerEngine::DoSinkDecCleanupSourcePrepare(PVCommandId aCmdId, OsclAny* aCmdContext)
——PVPlayerEngine::DoSourceNodePrepare(PVCommandId aCmdId, OsclAny* aCmdContext)
——PVMFNodeInterfaceImpl::GetState()
——PVMFNodeInterfaceImpl::Prepare(PVMFSessionId aSessionId,const OsclAny* aContext)
——QueueCommandL(cmd)
完成Doprepare后会对SinkNode和DecNode分别查询可选接口,在对decnode的后期处理中调用函数PVPlayerEngine::HandleDecNodeQueryInterfaceOptional,会进入Datapath的prepare函数中DoDatapathPrepare(*(aNodeContext.iEngineDatapath), aNodeContext.iCmdId, aNodeContext.iCmdContext);
PVPlayerEngine::DoDatapathPrepare(PVPlayerEngineDatapath &aDatapath, PVCommandId aCmdId, OsclAny* aCmdContext)