现在的位置: 首页 > 综合 > 正文

stagefright框架(二)- 和OpenMAX的運作

2013年11月02日 ⁄ 综合 ⁄ 共 1279字 ⁄ 字号 评论关闭
stagefright框架(二)- 和OpenMAX的運作
 
 
Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCOREOMX的實作,我們來看一下StagefrightOMX是如何運作的。

(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_SendCommandcall
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
}

抱歉!评论已关闭.