http://daimajishu.iteye.com/blog/1085197
AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video
renderer,以便畫到螢幕上去。
(1) 要將mVideoBuffer中的資料畫出來之前,必須先建立mVideoRenderer
if (mVideoRenderer ... void AwesomePlayer::initRenderer_l() |
(2) 如果video decoder是OMX
component,則建立一個AwesomeRemoteRenderer作為mVideoRenderer
從上段的程式碼(1)來看,AwesomeRemoteRenderer的本質是由OMX::createRenderer所創建的。createRenderer會先建立一個hardware
renderer -- SharedVideoRenderer (libstagefrighthw.so);若失敗,則建立software renderer -- SoftwareRenderer (surface)。
libHandle = dlopen("libstagefrighthw.so", RTLD_NOW); if (libHandle) impl = (*func)(...); if (!impl) |
(3) 如果video decoder是software
component,則建立一個AwesomeLocalRenderer作為mVideoRenderer
AwesomeLocalRenderer的constructor會呼叫本身的init函式,其所做的事和OMX::createRenderer一模一樣。
if (mLibHandle) mTarget = if (mTarget |
(4) mVideoRenderer一經建立就可以開始將解碼後的資料傳給它
[Check Timestamp] if (mVideoRenderer mVideoRenderer->render(mVideoBuffer); |