stagefright框架(二)- 和OpenMAX的運作
2024-08-02 02:54:27 220人阅读
Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。
(1) OMX_Init
OMXClient mClient;
AwesomePlayer::AwesomePlayer() { mClient.connect(); }
status_t OMXClient::connect() { mOMX = service->getOMX(); }
sp<IOMX> MediaPlayerService::getOMX() { mOMX = new OMX; }
OMX::OMX() : mMaster(new OMXMaster)
OMXMaster::OMXMaster() { addPlugin(new OMXPVCodecsPlugin); }
OMXPVCodecsPlugin::OMXPVCodecsPlugin() { OMX_MasterInit(); }
OMX_ERRORTYPE OMX_MasterInit() <-- under OpenCORE { return OMX_Init(); }
|
(2) OMX_SendCommand
OMXCodec::function_name() { mOMX->sendCommand(mNode, OMX_CommandStateSet, OMX_StateIdle); } status_t OMX::sendCommand(node, cmd, param) { return findInstance(node)->sendCommand(cmd, param); } status_t OMXNodeInstance::sendCommand(cmd, param) { OMX_SendCommand(mHandle, cmd, param, NULL); }
|
(3) 其他作用在 OMX 元件的指令
其他作用在OMX元件的指令也和OMX_SendCommand的call path一樣,請見下表:
OMXCodec | OMX | OMXNodeInstance |
| useBuffer | useBuffer (OMX_UseBuffer) |
| getParameter | getParameter (OMX_GetParameter) |
| fillBuffer | fillBuffer (OMX_FillThisBuffer) |
| emptyBuffer | emptyBuffer (OMX_EmptyThisBuffer) |
(4) Callback Functions
OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks = { &OnEvent, <--------------- omx_message::EVENT &OnEmptyBufferDone, <----- omx_message::EMPTY_BUFFER_DONE &OnFillBufferDone <------- omx_message::FILL_BUFFER_DONE }
|
stagefright框架(二)- 和OpenMAX的運作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉:
投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。