stagefright框架(五)-Video Rendering
来源:互联网 发布:小孩画画软件哪个好 编辑:程序博客网 时间:2024/05/16 01:52
(1) 要將mVideoBuffer中的資料畫出來之前,必須先建立mVideoRenderer
void AwesomePlayer::onVideoEvent()
{
...
if (mVideoRenderer == NULL)
{
initRenderer_l();
}
...
}
void AwesomePlayer::initRenderer_l()
{
if (!strncmp("OMX.", component, 4))
{
mVideoRenderer = new AwesomeRemoteRenderer(
mClient.interface()->createRenderer(
mISurface,
component,
...)); .......... (2)
}
else
{
mVideoRenderer = new AwesomeLocalRenderer(
...,
component,
mISurface); ............................ (3)
}
}
(2) 如果video decoder是OMX component,則建立一個AwesomeRemoteRenderer作為mVideoRenderer
從上段的程式碼(1)來看,AwesomeRemoteRenderer的本質是由OMX::createRenderer所創建的。createRenderer會先建立一個hardware renderer -- SharedVideoRenderer (libstagefrighthw.so);若失敗,則建立software renderer -- SoftwareRenderer (surface)。
sp<IOMXRenderer> OMX::createRenderer(...)
{
VideoRenderer *impl = NULL;
libHandle = dlopen("libstagefrighthw.so", RTLD_NOW);
if (libHandle)
{
CreateRendererFunc func = dlsym(libHandle, ...);
impl = (*func)(...); <----------------- Hardware Renderer
}
if (!impl)
{
impl = new SoftwareRenderer(...); <---- Software Renderer
}
}
(3) 如果video decoder是software component,則建立一個AwesomeLocalRenderer作為mVideoRenderer
AwesomeLocalRenderer的constructor會呼叫本身的init函式,其所做的事和OMX::createRenderer一模一樣。
void AwesomeLocalRenderer::init(...)
{
mLibHandle = dlopen("libstagefrighthw.so", RTLD_NOW);
if (mLibHandle)
{
CreateRendererFunc func = dlsym(...);
mTarget = (*func)(...); <---------------- Hardware Renderer
}
if (mTarget == NULL)
{
mTarget = new SoftwareRenderer(...); <--- Software Renderer
}
}
(4) mVideoRenderer一經建立就可以開始將解碼後的資料傳給它
void AwesomePlayer::onVideoEvent()
{
if (!mVideoBuffer)
{
mVideoSource->read(&mVideoBuffer, ...);
}
[Check Timestamp]
if (mVideoRenderer == NULL)
{
initRenderer_l();
}
mVideoRenderer->render(mVideoBuffer); <----- Render Data
}
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering .
- stagefright框架(五)-Video Rendering
- stagefright框架(五)-Video Rendering
- StageFright框架(五)Video Rendering
- stagefright框架(五)-Video Rendering
- Stagefright (5) - Video Rendering
- 文件格式汇总
- flex 操作xml
- Fedora编译程序或移动窗口CPU使用率变高的解决方法,ATI显卡和Xorg兼容
- 关于php-工行支付接口错误提示总结
- htons
- stagefright框架(五)-Video Rendering
- android多国语言与国际化
- 页面无法显示—System.StackOverflowException,原来是个不该犯的错误!
- stagefright框架(六)-Audio Playback的流程
- stagefright框架(七)-Audio和Video的同步
- 拨得云开见月明,Visual Studio 2010 SP1 补丁 发布了
- 理解
- 五个好用的网络协议分析工具(附下载)
- hibernate之注意事项