(註2) Stagefright的架構尚不斷在演進中,本系列文章並未含括所有的模組。(註3) Audio的播放是交由 AudioPlayer 來處理,請參考《Stagefright (6) - Audio Playback的流程》。stagefright框架(二)- 和OpenMAX的運作Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。(1) OMX_InitOMXClient 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_SendCommandOMXCodec::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一樣,請見下表:OMXCodecOMXOMXNodeInstanceuseBufferuseBuffer (OMX_UseBuffer)getParametergetParameter (OMX_GetParameter)fillBufferfillBuffer (OMX_FillThisBuffer)emptyBufferemptyBuffer (OMX_EmptyThisBuffer)(4) Callback FunctionsOMX_CALLBACKTYPE OMXNodeInstance::kCallbacks ={&OnEvent, <--------------- omx_message::EVENT&OnEmptyBufferDone, <----- omx_message::EMPTY_BUFFER_DONE&OnFillBufferDone <------- omx_message::FILL_BUFFER_DONE}stagefright框架(三)-選擇Video Decoder在《Stagefright (1) Video Playback的流程》中,我們並沒有詳述Stagefright是如何根據影片檔的類型來選擇適合的video decoder,現在,就讓我們來看一看。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-50199-2.html
做事方式
也是密封的小袋子里拱出来的