AddDataSink
来源:互联网 发布:app软件打不开怎么办 编辑:程序博客网 时间:2024/06/08 00:23
在完成文件解析后就要添加输出sink了,首先在Driver层介绍上层命令(PlayerSetAudioSink*)处理:
函数PlayerDriver::handleSetAudioSink(PlayerSetAudioSink* command)
1)构建指向类AndroidAudioOutput的指针,保存在Driver的成员mAudioOutputMIO中,有关此类的描述:音频buffer会在一个独立的音频输出线程中加入到一个消息队列中,一旦数据buffer成功写入,就会通过另一个消息队列返回到MIO和Engine中去。
2)调用mAudioOutputMIO->setAudioSink(command->audioSink()),参数是command中的audiosink,将参数传送到mAudioOutputMIO的成员mAudioSink中去,mAudioSink的类型是sp<MediaPlayerInterface::AudioSink>
3)PVMediaOutputNodeFactory::CreateMediaOutputNode(mAudioOutputMIO),创建输出Node,返回指向类PVMediaOutputNode的指针,保存在mAudioNode(PVMFNodeInterface*)中,类PVMFNodeInterface是类PVMediaOutputNode的父类;
继承关系:
class PVMediaOutputNode
: public PVMFNodeInterfaceImpl
: public PVMFNodeInterface
: public PVMFPortActivityHandler
, public PvmiMIOObserver
, public PvmfNodesSyncControlInterface
, public PvmiCapabilityAndConfigBase
4)构建类PVPlayerDataSinkPVMFNode,指针mAudioSink(PVPlayerDataSink*),类PVPlayerDataSink是类PVPlayerDataSinkPVMFNode的父类;在此要注意mAudioNode与mAudioSink的不同,两者没有类的继承关系;
5)((PVPlayerDataSinkPVMFNode *)mAudioSink)->SetDataSinkNode(mAudioNode),体现出了PVPlayerDataSinkPVMFNode与PVMediaOutputNode的关系,将指向PVMediaOutputNode的指针传递给类PVPlayerDataSinkPVMFNode的成员iNode;
6)mPlayer->AddDataSink(*mAudioSink, command),进入Engine层处理;
函数PVPlayerEngine::AddDataSink(PVPlayerDataSink& aDataSink, const OsclAny* aContextData)
调用函数AddCommandToQueue(PVP_ENGINE_COMMAND_ADD_DATA_SINK, (OsclAny*)aContextData, ¶mvec)新建命令并添加到命令队列,将aDataSink保存在param.pOsclAny_value中;
关于cmd:
命令类型,cmdID,aContextData,aParamVector,就是这几个量。
函数PVPlayerEngine::DoAddDataSink(PVPlayerEngineCommand& aCmd)
参数:cmd就是上面刚添加到命令队列中的命令。
1)从命令中取出datasink(PVPlayerDataSink*);
2)再将datasink保存在newdatapath(PVPlayerEngineDatapath).iDataSink中,
3)将newdatapath加入到iDatapathList(路径列表),iDatapathList是类PVPlayerEngine的一个成员量;
4)EngineCommandCompleted函数完成;
- AddDataSink
- OpenCore:AddDataSink
- linux 递归删除 指定文件
- study_Javascript_03常见系统函数
- 代码生活
- ubuntu 9.10共享失败解决
- zend Studio
- AddDataSink
- EOSS V1.0企业运营支撑系统(基于RBAC原理的权限管理)
- SQL中CONVERT转化函数的用法
- 项目终于快over啦...
- Unicode与ASCII的转换
- hdoj 1286 (欧拉函数)
- 注意Python赋值表达式后的逗号
- 使用oracle的trunc和dbms_random.value随机取n条数据
- 利用Java反射机制,调用一个类的构造函数和一般函数