随笔分类 - stagefright
摘要:在阅读SurfaceFlinger HardwareComposer以及gralloc相关代码的过程中,我们经常会遇到native_handle private_handle_t ANativeWindowBuffer ANativeWindow GraphicBuffer Surface等等一系列
阅读全文
摘要:android的多媒体框架中,stagefright其实是AwesomePlayer的代理,就是个皮包公司。status_t StagefrightPlayer::setDataSource( const char *url, const KeyedVector *headers)...
阅读全文
摘要:数据流的封装一、由数据源DataSource生成MediaExtractor。通过MediaExtractor::Create(dataSource)来实现。Create方法通过两步来生成相应的MediaExtractor:1、通过dataSource->sniff来探测数据类型2、生成相应的Ext...
阅读全文
摘要:主要调用awesomeplay.cpp的函数来实现音视频等功能,可以说是对awesomeplay.cpp的封装,进一步抽象,然后提供给上层调用,主要的调用者是MediaPlayerService.cpp。提供的API如下:1.StagefrightPlayer::StagefrightPlayer(...
阅读全文
摘要:讲完了audio和video的处理流程,接下来要看的是audio和video同步化(synchronization)的问题。OpenCORE的做法是设置一个主clock,而audio和video就分别以此作为输出的依据。而在Stagefright中,audio的输出是透过callback函式来驱动,...
阅读全文
摘要:到目前为止,我们都只着重在video处理的部分,对于audio却只字未提。这篇文章将会开始audio处理的流程。Stagefright中关于audio的部分是交由AudioPlayer来处理,它是在AwesomePlayer::play_l中被建立的。(1) 当上层应用程式要求播放影音时,Audio...
阅读全文
摘要:AwesomePlayer::onVideoEvent除了透過OMXCodec::read取得解碼後的資料外,還必須將這些資料(mVideoBuffer)傳給video renderer,以便畫到螢幕上去。(1)要將mVideoBuffer中的資料畫出來之前,必須先建立mVideoRendererv...
阅读全文
摘要:這篇文章將介紹Stagefright中是如何和OMX video decoder传送buffer。(1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且要求decoder將解碼後的data傳回來status_t OMXCodec::read(...){i...
阅读全文
摘要:在《Stagefright (1) – Video Playback的流程》中,我们并没有详述Stagefright是如何根据影片档的类型来选择适合的video decoder,现在,就让我们来看一看。(1) Video decoder是在onPrepareAsyncEvent中的initVideo...
阅读全文
摘要:Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的。(1) OMX_InitOMXClient mClient;AwesomePlayer::AwesomePlayer(){mClient.c...
阅读全文
摘要:在Android上,預設的多媒體框架(multimedia framework)是OpenCORE。 OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定;但是其缺點是過於龐大複雜,需要耗費相當多的時間去維護。從 Android 2.0開始,Google引進了架構稍...
阅读全文