close

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)

 

 




 

 

 

 

Stagefright_02.JPG

 



(4) Callback Functions

OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks =
{
  &OnEvent, <--------------- omx_message::EVENT
  &OnEmptyBufferDone, <----- omx_message::EMPTY_BUFFER_DONE
  &OnFillBufferDone <------- omx_message::FILL_BUFFER_DONE
}




arrow
arrow
    全站熱搜

    iamkcspa 發表在 痞客邦 留言(1) 人氣()