MediaBuffer使用要点
做过Stagefright框架支持库开发的都知道,Android专门为数据传递封装了一个类:MediaBuffer,源码路径为:
1)、头文件:frameworks/base/include/media/stagefright/MediaBuffer.h
2)、实现源码:frameworks/base/media/libstagefright/MediaBuffer.cpp
该类专用于管理数据缓冲区,是Stagefright各组建间进行数据传递的交通工具。以解码为例,Extractor将读取到的Audio和Video数据分别放入不同的MediaBuffer中,一个传入Video decoder进行视频解码,一个传入Audio decoder进行音频解码;Video Decoder将解码后的数据放入一个新的视频MediaBuffer中,传递给Render去显示,Audio decoder将解码后的数据也放入一个新的音频MediaBuffer中送到Render去放音。当然,在传递前还有很多附加的信息需要设置传递,这里不做说明。
下面就本人在使用MediaBuffer对其的理解是使用重点做详细说明。MediaBuffer对缓冲区的内部实现进行了很好的封装,使用者根本不需要关心里面的实现细节,而且所有我们对缓冲区关心的问题,该类都已经提供了接口。
常见数据区操作:
MediaBuffer mBuffer;
1)、获取数据缓冲区首地址:mBuffer->data( );
2)、获取数据缓冲区的大小:mBuffer->size( );
3)、获取缓冲区中有效数据区相对数据缓冲区起始地址的偏移:mBuffer->range_offset( );
4)、设置缓冲区中有效数据区的偏移和长度:mBuffer->set_range(size_t offset, size_t length);
5)、获取有效数据区的长度:mBuffer->range_length( );
6)、获取有效数据区的起始地址(偏移):mBuffer->data( ) + mBuffer->range_offset( );
易犯的错误:
1)、误用数据缓冲区首地址代替有效数据区首地址。即用mBuffer->data( )代替mBuffer->data( ) + mBuffer->range_offset( ),这样得到的是数据缓冲区的起始地址,而不一定时有效数据区的起始地址;实际使用中,有效数据区通常是数据缓冲区的一个有效子集而已。
2)、误用数据缓冲区的大小代替有效数据区的大小。即用mBuffer->size( )代替mBuffer->range_length( )
MediaBuffer使用要点相关推荐
- 深度人脸识别:CVPR2020论文要点
深度人脸识别:CVPR2020论文要点 Towards Universal Representation Learning for Deep Face Recognition 论文链接:https:/ ...
- 变更控制管理流程图_干货丨项目管理流程及绘制规范要点
1 什么是流程 流程是把一个或多个输入转换为对顾客有价值的输出的活动.简单地来说,流程其实就是"工作流转的过程",这些工作需要多个部门.多个岗位的参与和配合,这些部门.岗位之间会有 ...
- C#调用windows api的要点
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...
- C#中调用Windows API的要点
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...
- 启动子级时出错_减速机安装与使用时需注意的八个要点,细节很重要!
减速机安装方式一直都是广大朋友遇到的问题,因为安装出错不光会影响使用,还可能会造成减速机的损伤,一台减速机价格不菲,那么安装时该注意的八个要点都有什么呢?一起来看看吧! 1.底座式安装,应校准中心线高 ...
- 联机分析处理系统与联机事务处理系统的区别和联系_混合事务分析处理“HTAP”的技术要点分析...
HTAP是近些年来比较火的一个概念,本文将聊聊HTAP的前世今生及技术特点. 一.数据应用类别 根据数据的使用特征,可简单做如下划分.在选择技术平台之前,我们需要做好这样的定位. 1.1 OLTP 联 ...
- 你必须了解的微服务架构设计的10个要点!
近来,几乎人人都在谈论微服务.微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境等.本文将介绍微服务架构设计中的一些要点. 微服务架构设计时有哪些要点 ...
- 医院六级电子病历建设思路及要点
产生背景 在医院电子病历信息化发展的过程中,先后经历了纸质病历.电子病历.结构化电子病历以及具有全医疗过程管理能力的电子病历四个阶段.临床业务需求质量的逐步提升,标准规范的逐步细化,互联网+战略的落地 ...
- c#创建、保存excel正常执行要点补疑
网上搜索C#实现excel操作的示例太多了,但不知道有多少是经过验证确实可行才发布出来的,也是因为开发需要,我找了一些代码却发现大多都不能正确执行完毕,于是决定补充自己在实践中遇到的要点以供参考.如下 ...
最新文章
- c#中页面之间传值传参的六种方法
- IP地址的分类及各类IP的最大网络数、网络号范围和最大主机数
- 【渝粤题库】广东开放大学 计算机英语 形成性考核
- nginx 根证书 服务器证书,Nginx双向证书校验(服务器验证客户端证书)
- python机器人算法_DBscan算法及其Python实现
- 【牛客 - 371牛客OI周赛7-提高组B】小睿睿的询问(RMQ,ST表维护下标)
- 基于阿里云的 Node.js 稳定性实践
- reduce 数据倾斜_Spark(四十)数据倾斜解决方案之将reduce join转换
- bootstrap 常用的导航组件
- 目录 1. 常见mime类型	1 1.1. 2.1.1. Type application	2 2.1.2. Type audio 22.1.3. Type image 32.1.4. Type t
- Django中文文档2.0
- mysql复制表结构(包括索引)
- Devise邮件模板路径
- linux rtc与时钟
- 鸿蒙系统是手机系统还是电脑系统,鸿蒙系统能兼容手机电脑和智能设备,这是怎样实现的?...
- 漫画 | 打死我也不学编译了!
- 基于GoogLeNet实现鸟类识别任务
- 这13个GIS开源软件,你了解吗?
- 利用Pyecharts绘制仪表盘图的案例【含参数解释】
- 再牛的键盘也敲不出我的孤单
热门文章
- 千米网:未来,是一个一千米的梦想
- loadrunner脚本中关于httpCode401特殊情况
- 用python进行GUI开发的选择
- Oracle大型数据库系统在AIX/UNIX上的实战详解
- JDK18 Java 18 拥有 9 个新特性
- 神经网络用作分类器(附代码matlab)
- 用计算机进行有理数除法时,《有理数的乘除法》的教案
- ubuntu16.04安装python3.6-dev超时_vitrualBox+ubuntu16.04安装python3.6最新教程及详细步骤...
- Java 多态的特性和概念
- Maven分布式工程-分页查询(一)