做过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使用要点相关推荐

  1. 深度人脸识别:CVPR2020论文要点

    深度人脸识别:CVPR2020论文要点 Towards Universal Representation Learning for Deep Face Recognition 论文链接:https:/ ...

  2. 变更控制管理流程图_干货丨项目管理流程及绘制规范要点

    1 什么是流程 流程是把一个或多个输入转换为对顾客有价值的输出的活动.简单地来说,流程其实就是"工作流转的过程",这些工作需要多个部门.多个岗位的参与和配合,这些部门.岗位之间会有 ...

  3. C#调用windows api的要点

    在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...

  4. C#中调用Windows API的要点

    在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...

  5. 启动子级时出错_减速机安装与使用时需注意的八个要点,细节很重要!

    减速机安装方式一直都是广大朋友遇到的问题,因为安装出错不光会影响使用,还可能会造成减速机的损伤,一台减速机价格不菲,那么安装时该注意的八个要点都有什么呢?一起来看看吧! 1.底座式安装,应校准中心线高 ...

  6. 联机分析处理系统与联机事务处理系统的区别和联系_混合事务分析处理“HTAP”的技术要点分析...

    HTAP是近些年来比较火的一个概念,本文将聊聊HTAP的前世今生及技术特点. 一.数据应用类别 根据数据的使用特征,可简单做如下划分.在选择技术平台之前,我们需要做好这样的定位. 1.1 OLTP 联 ...

  7. 你必须了解的微服务架构设计的10个要点!

    近来,几乎人人都在谈论微服务.微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境等.本文将介绍微服务架构设计中的一些要点. 微服务架构设计时有哪些要点 ...

  8. 医院六级电子病历建设思路及要点

    产生背景 在医院电子病历信息化发展的过程中,先后经历了纸质病历.电子病历.结构化电子病历以及具有全医疗过程管理能力的电子病历四个阶段.临床业务需求质量的逐步提升,标准规范的逐步细化,互联网+战略的落地 ...

  9. c#创建、保存excel正常执行要点补疑

    网上搜索C#实现excel操作的示例太多了,但不知道有多少是经过验证确实可行才发布出来的,也是因为开发需要,我找了一些代码却发现大多都不能正确执行完毕,于是决定补充自己在实践中遇到的要点以供参考.如下 ...

最新文章

  1. c#中页面之间传值传参的六种方法
  2. IP地址的分类及各类IP的最大网络数、网络号范围和最大主机数
  3. 【渝粤题库】广东开放大学 计算机英语 形成性考核
  4. nginx 根证书 服务器证书,Nginx双向证书校验(服务器验证客户端证书)
  5. python机器人算法_DBscan算法及其Python实现
  6. 【牛客 - 371牛客OI周赛7-提高组B】小睿睿的询问(RMQ,ST表维护下标)
  7. 基于阿里云的 Node.js 稳定性实践
  8. reduce 数据倾斜_Spark(四十)数据倾斜解决方案之将reduce join转换
  9. bootstrap 常用的导航组件
  10. 目录 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
  11. Django中文文档2.0
  12. mysql复制表结构(包括索引)
  13. Devise邮件模板路径
  14. linux rtc与时钟
  15. 鸿蒙系统是手机系统还是电脑系统,鸿蒙系统能兼容手机电脑和智能设备,这是怎样实现的?...
  16. 漫画 | 打死我也不学编译了!
  17. 基于GoogLeNet实现鸟类识别任务
  18. 这13个GIS开源软件,你了解吗?
  19. 利用Pyecharts绘制仪表盘图的案例【含参数解释】
  20. 再牛的键盘也敲不出我的孤单

热门文章

  1. 千米网:未来,是一个一千米的梦想
  2. loadrunner脚本中关于httpCode401特殊情况
  3. 用python进行GUI开发的选择
  4. Oracle大型数据库系统在AIX/UNIX上的实战详解
  5. JDK18 Java 18 拥有 9 个新特性
  6. 神经网络用作分类器(附代码matlab)
  7. 用计算机进行有理数除法时,《有理数的乘除法》的教案
  8. ubuntu16.04安装python3.6-dev超时_vitrualBox+ubuntu16.04安装python3.6最新教程及详细步骤...
  9. Java 多态的特性和概念
  10. Maven分布式工程-分页查询(一)