在Stagefright中的编解码功能还是利用openMAX框架,接下来分析一下在StageFright中OMX是如何运用的。
(1)OMX_Init openMAX的初始化。
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 | 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框架进行编解码功能的实现,包括初始化过程、发送命令操作以及其他关键指令的使用,并深入介绍了回调函数的作用。
345

被折叠的 条评论
为什么被折叠?



