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( )



  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何雷 — 智能汽车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值