stagefright框架(四)-Video Buffer傳輸流程
這篇文章將介紹Stagefright中是如何和OMX video decoder傳遞buffer。
(1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且要求decoder將解碼後的data傳回來
- status_t OMXCodec::read(...)
- {
- if (mInitialBufferSubmit)
- {
- mInitialBufferSubmit = false;
- drainInputBuffers(); <----- OMX_EmptyThisBuffer
- fillOutputBuffers(); <----- OMX_FillThisBuffer
- }
- ...
- }
- void OMXCodec::drainInputBuffers()
- {
- Vector<BufferInfo> *buffers = &mPortBuffers[kPortIndexInput];
- for (i = 0; i < buffers->size(); ++i)
- {
- drainInputBuffer(&buffers->editItemAt(i));
- }
- }
- void OMXCodec::drainInputBuffer(BufferInfo *info)
- {
- mOMX->emptyBuffer(...);
- }
- void OMXCodec::fillOutputBuffers()
- {
- Vector<BufferInfo> *buffers = &mPortBuffers[kPortIndexOutput];
- for (i = 0; i < buffers->size(); ++i)
- {
- fillOutputBuffer(&buffers->editItemAt(i));
- }
- }
- void OMXCodec::fillOutputBuffer(BufferInfo *info)
- {
- mOMX->fillBuffer(...);
- }
(2) Decoder從input port讀取資料後,開始進行解碼,並且回傳EmptyBufferDone通知OMXCodec
- void OMXCodec::on_message(const omx_message &msg)
- {
- switch (msg.type)
- {
- case omx_message::EMPTY_BUFFER_DONE:
- {
- IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer;
- drainInputBuffer(&buffers->editItemAt(i));
- }
- }
- }
OMXCodec收到EMPTY_BUFFER_DONE之後,繼續傳送下一個未解碼的資料給decoder。
(3) Decoder將解碼完的資料送到output port,並回傳FillBufferDone通知OMXCodec
- void OMXCodec::on_message(const omx_message &msg)
- {
- switch (msg.type)
- {
- case omx_message::FILL_BUFFER_DONE:
- {
- IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer;
- fillOutputBuffer(info);
- mFilledBuffers.push_back(i);
- mBufferFilled.signal();
- }
- }
- }
OMXCodec收到FILL_BUFFER_DONE之後,將解碼後的資料放入mFilledBuffers,發出mBufferFilled信號,並且要求decoder繼續送出資料。
(4) read函式在後段等待mBufferFilled信號。當mFilledBuffers被填入資料後,read函式將其指定給buffer指標,並回傳給AwesomePlayer
- status_t OMXCodec::read(MediaBuffer **buffer, ...)
- {
- ...
- while (mFilledBuffers.empty())
- {
- mBufferFilled.wait(mLock);
- }
- BufferInfo *info = &mPortBuffers[kPortIndexOutput].editItemAt(index);
- info->mMediaBuffer->add_ref();
- *buffer = info->mMediaBuffer;
- }
stagefright框架(四)-Video Buffer傳輸流程相关推荐
- StageFright框架(四)Video Buffer傳輸流程
這篇文章將介紹Stagefright中是如何和OMX video decoder傳遞buffer. (1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且 ...
- stagefright框架(四)-Video Buffer傳輸流程 .
這篇文章將介紹Stagefright中是如何和OMX video decoder傳遞buffer. (1) OMXCodec會在一開始的時候透過read函式來傳送未解碼的data給decoder,並且 ...
- android stagefright框架
http://blog.csdn.net/mirkerson/article/details/38520135 stagefright框架(一)Video Playback的流程 在Android上, ...
- StageFright框架流程解读
1. StageFright介绍 Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,并没有完全抛弃ope ...
- android stagefright 框架
原文:[转]android stagefright 框架 链接:http://blog.chinaunix.net/uid-9838896-id-2976618.html 在Android上,预设的多 ...
- [WCF]利用net.tcp傳輸協定來建置WCF Service
http://www.dotblogs.com.tw/puma/archive/2009/06/21/wcf-net-tcp-channelfactory-clientbase.aspx 最近很少在寫 ...
- stagefright框架概述
多媒体框架stagefright是android2.3后替代opencore的.整个框架非常庞大,这里将它分为编码器.解码器.合成器.分离器.PCM数据和YUV数据输入.数据源(DataSource) ...
- ffmpeg的内部Video Buffer管理和传送机制
本文主要介绍ffmpeg解码器内部管理Video Buffer的原理和过程,ffmpeg的Videobuffer为内部管理,其流程大致为:注册处理函数->帧级释放->帧级申请->清空 ...
- 藉由GZipStream的壓縮,來減少Web Service的傳輸量
不知道有多少人有遇到跟我一樣的問題,就是Web Service的資料回傳量太大了,如果都是走區域網路的話,除非量很大,不然還感覺不太出來,可是,如果是透過ADSL的頻寬的話,那就很驚人了,以30MB的 ...
最新文章
- OSChina 周二乱弹 ——假期综合症
- vc动态生成按钮并响应
- 深入理解分布式技术 - Redis 分布式锁解决方案
- 快速排序算法_常用排序算法之快速排序
- Webserver内存溢出分析
- 如何QLayout内部的成员部件之间从左到右依次排列
- 使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务
- 微信小程序实现选项卡
- 客户端控件Javascript验证类
- Entity Framework 4 数据事务操作
- win10 android 手机驱动下载,win10手机刷机包驱动
- 【读书笔记——开关电源】《精通开关电源设计》(1)
- asp.net母版页学习总结
- 微软商店打不开,错误代码0x80131500
- 哪些客户群体适合使用云服务器?
- [高项]消极风险VS积极风险
- 100以内所有质数的输出。
- 获取微信公众号的二维码图片
- golang牛牛算法规则与聊天功能
- CentOS7配置nexus开机自启动
热门文章
- [渝粤题库]广东开放大学 社会调查与方法 形成性考核
- 海康监控H5 实时视频监控
- 历年四级作文范文(1994.6-2007.6)
- Web前端成都培训机构
- 你也可以找到好工作(一)
- 【牛客网】---字符集合
- “那些看似不起波澜的日复一日,终会在某天让你看到坚持的意义。”
- how2heap glibc 2.27
- c语言中定义密码为英文字母,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
- 子网怎么算?IP地址(A,B,C,D,E类地址),子网,子网掩码,容纳主机20台,网络号,主机号