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

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的運作)