`
isiqi
  • 浏览: 16483329 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

stagefright框架(五)-Video Rendering

阅读更多
AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video renderer,以便畫到螢幕上去。

(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 decoderOMX 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 decodersoftware component,則建立一個AwesomeLocalRenderer作為mVideoRenderer

AwesomeLocalRendererconstructor會呼叫本身的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-plugins-master_stagefright_android_

    《Android多媒体框架Stagefright深度解析》 在Android系统中,多媒体处理是一个至关重要的部分,它涉及音频、视频的播放、编码以及解码等众多功能。Stagefright是Android平台上的核心多媒体框架,负责处理多媒体...

    stagefright框架2.0.pdf

    Stagefright 框架 2.0.pdf Stagefright 框架是 Android 多媒体框架的一部分,自 Android 2.0 开始作为OpenCORE 的替代品。Stagefright 框架具有简洁的架构,易于维护,但仍然保留了跨平台的移植性。 Stagefright...

    stagefright框架2.0

    Stagefright 框架 2.0 Stagefright 框架 2.0 是 Android 中的多媒体框架,自 Android 2.0 开始引入,以逐渐取代 OpenCORE。Stagefright 框架具有简洁的架构和良好的跨平台移植性,是 Android 多媒体架构中的重要...

    android多媒体stagefright框架详细分析

    Android多媒体Stagefright框架是Android系统中用于处理多媒体内容的一个重要框架,其关键组件包括OMX、AwesomePlayer以及处理AAC音频等多媒体数据的模块。本文档将详细解析Stagefright框架的基本结构、工作原理以及...

    Android 系统下Stagefright Player框架介绍

    ### Android系统下Stagefright Player框架详解 #### Stagefright在Android多媒体架构中的核心地位 在深入探讨Stagefright框架之前,我们先了解其在Android多媒体架构中的位置。Stagefright是Google为Android平台...

    stagefright与opencore对比

    在Android系统中,多媒体处理是不可或缺的一部分,而Stagefright和OpenCore是两个重要的多媒体框架。它们各自在不同的时期和环境下承担着Android平台上的多媒体播放和处理任务。下面将详细对比这两个框架,以便理解...

    android2.3源码解读—stagefright框架

    《Android 2.3源码解读—Stagefright框架》 Android系统中,多媒体处理是一个至关重要的部分。在Android 2.3版本之前,OpenCORE是主要的多媒体框架,但其复杂的架构和维护成本促使Google引入了更为简洁的Stage...

    StageFright_Video Playback的流程

    ### StageFright_Video Playback流程详解 在深入探讨StageFright框架中视频播放流程之前,有必要先简要介绍StageFright。StageFright是Android系统中用于多媒体处理的核心框架,负责音频、视频的编码和解码工作。它...

    stagefright-cve-2015-3864:PoC-CVE-2015-3864的二进制补丁(非生产版本,使用后果自负)

    标题中的"Stagefright-CVE-2015-3864"是一个重要的安全漏洞,它涉及到Android操作系统中的多媒体处理框架Stagefright。在2015年,这个漏洞被公开,它允许攻击者通过恶意MMS( Multimedia Messaging Service,多媒体...

    StageFright_Audio和Video的同步

    ### StageFright_Audio与Video的同步 #### StageFright框架简介 StageFright是Android系统中的多媒体框架,用于处理音频、视频等媒体文件的播放。该框架支持多种媒体格式,并且提供了高度优化的编解码器。在Stage...

    stagefright + omx小结

    stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结 stagefright + omx小结

    stagefright框架

    【Stagefright框架详解】 Stagefright是Android操作系统中用于处理多媒体内容的核心框架,自Android 2.0开始引入,逐渐取代了原本的OpenCORE框架。Stagefright以其更为简洁的架构,为视频和音频播放提供了高效且轻...

    stagefright awesomeplayer框架

    《Stagefright AwesomePlayer框架详解》 Android多媒体框架在早期主要依赖于OpenCORE,这是一个功能强大但结构复杂的框架,适合跨平台移植。然而,自Android 2.0开始,Google引入了一个更为简洁高效的框架——Stage...

    stageFright_OpenMax系统.doc

    stageFright_OpenMax系统.doc,对Android2.3的 stagefright框架和openMAx的深入分析

    android-stagefright处理httplivestreaming缓冲机制

    在Android系统中,Stagefright框架负责多媒体内容的播放,包括HTTP Live Streaming(HLS)。本文将深入探讨Stagefright处理HLS的缓冲机制,同时也会涉及到Android Binder机制,它是Android系统中进程间通信(IPC)的...

    Android多媒体框架下Stagefright的功能扩展.pdf

    本文详细介绍了Android多媒体框架下Stagefright的功能扩展策略,重点阐述了采用桥接设计模式以及整合FFmpeg框架来开发适配Stagefright的解包装和解码插件的过程。这种扩展方法能够使Android多媒体框架支持更多种类的...

    stagefright playlist randomizer-开源

    "Stagefright Playlist Randomizer" 是一个开源项目,它的主要功能是生成MP3和OGG格式的播放列表。这个工具是用Perl编程语言编写的,为音乐爱好者提供了一种智能化的方式来组织和随机播放他们的音乐收藏。它不仅仅是...

Global site tag (gtag.js) - Google Analytics