当前位置: 首页 > wzjs >正文

潍坊建设网站的公司网站建设一般要多少费用

潍坊建设网站的公司,网站建设一般要多少费用,可信网站验证多少钱,企业网络推广体系图上一篇 MediaExtractor 笔记中我们学习了 extractor 以及 source 调用的层次结构,这一节我们会看一看部分的实现细节。 1、getFormat getFormat 是 IMediaSource 的一个方法,调用它可以获得指定 track 的格式信息。格式信息在 extractor 中被称为 Meta…

上一篇 MediaExtractor 笔记中我们学习了 extractor 以及 source 调用的层次结构,这一节我们会看一看部分的实现细节。

1、getFormat

getFormat 是 IMediaSource 的一个方法,调用它可以获得指定 track 的格式信息。格式信息在 extractor 中被称为 MetaData,里面存储有编码格式,视频的宽高,时长,音频的通道数,采样率等等信息,有的存储有解码所需要的 csd 信息。

在高版本的 Android 中,格式信息在 extractor 中一般以 AMediaFormat 的形式存储(例如 mp4 extractor),AMediaFormat 内部实际就是一个 AMessage,信息以 key-value 的形式存储,key 是字符串;有的会以 MetaData 的形式存储(例如 mpeg2 ts extractor),MetaData 也是以 key-value 的形式存储信息,但是它的 key 是int类型,存储的信息会更多一点:

bool MetaDataBase::setData(uint32_t key, uint32_t type, const void *data, size_t size);

可以看到出了 key-value 外还多了 type 和 size 信息。

之所以要这么设计是因为 format 需要通过 binder 跨进程传递给 mediaserver,传递的时候我们需要知道被传递内容的大小信息,而 type 大概是用做特殊的标记。

status_t MediaTrackCUnwrapper::getFormat(MetaDataBase& format) {sp<AMessage> msg = new AMessage();AMediaFormat *tmpFormat =  AMediaFormat_fromMsg(&msg);media_status_t ret = wrapper->getFormat(wrapper->data, tmpFormat);sp<MetaData> newMeta = new MetaData();convertMessageToMetaData(msg, newMeta);delete tmpFormat;format = *newMeta;return reverse_translate_error(ret);
}

从以上代码片我们可以知道,内部的 getFormat 方法传出参数为 AMediaFormat,也就是说无论内部 format 以何种形式存储,最终会转换为 AMediaFormat,以 MPEG2TSSource 为例,MetaData 会先被转换为 AMessage,再转换为 AMediaFormat 回传:

media_status_t MPEG2TSSource::getFormat(AMediaFormat *meta) {sp<MetaData> implMeta = mImpl->getFormat();sp<AMessage> msg;convertMetaDataToMessage(implMeta, &msg);copyAMessageToAMediaFormat(meta, msg);return AMEDIA_OK;
}

跨进程传递时 AMediaFormat 又要被转换为 MetaData,因为 MetaData 中有 writeToParcel 和 createFromParcel( 方法,很方便就完成 Parcel 的封装和解封装。

其实 AMessage 也有 writeToParcel 和 FromParcel,可以很轻松的让 AMessage 在进程间传递,但是这两个方法不能用于 vendor 和 apex。

上面说可以将 MetaData 和 AMessage 相互转换,但是由于它们的 key 的类型并不一样,所以一定有对照关系,这里我们要看 Utils.cpp 这边的几个 pair,pair 中没有的对照关系在 convertMessageToMetaData 和 convertMetaDataToMessage 中会指定转换关系。

如果我们需要自定义一些 Format 信息,那么必须要在 convertMessageToMetaData 和 convertMetaDataToMessage 实现转换关系,否则 extractor parse 出的信息将无法通过 binder 传递,mediaserver 端也无法解析到自定义的 format。

MetaData 所用的 key 位于 MetaDataBase.h,以 enum 的形式提供,如何使用可以参考 Utils.cpp 。

AMediaFormat 使用的 key 位于 NdkMediaFormat.cpp ,以字符串的形式提供,AMediaFormat 如何使用同样参考 Utils.cpp 。

2、MediaExtractor 与 MediaTrack(MediaSource) 设计结构

看代码我们可以发现基础实现 MediaExtractor 和 MediaTrack 分别继承于 MediaExtractorPluginHelperMediaTrackHelper,这两个基类的声明位于 MediaExtractorPluginHelper.h,除了这两个类外,还有非常重要的 MediaBufferHelper、MediaBufferGroupHelper、DataSourceHelper。

往上一层,与之相对应的 C 风格的 api 声明位于 MediaExtractorPluginApi.h,创建了 MediaExtractorPluginHelper 和 MediaTrackHelper 对象后,会将其封装到 CMediaExtractorCMediaTrack 供上层使用。wrap 方法在 MediaExtractorPluginHelper.h 中有提供,对 Helper 提供的 api 进行了封装。

再往上就到了 MediaExtractor MediaTrack,它们两个是基类提供了对外接口,对应的实现是 MediaExtractorCUnwrapper 和 MediaTrackCUnwrapper 。它们内部封装了对 CMediaExtractorCMediaTrack 的调用以及对返回结果的处理。

最外层是binder封装,这里就不细看了。

请添加图片描述

看到这里我们大致就可以了解,binder 调用的是 MediaExtractor 和 MediaTrack 提供的标准接口,它们对内部依赖进行了抽象,使其依赖于 CMediaExtractor 和 CMediaTrack,而不是依赖于具体的实现,具体实现封装在CMediaExtractor 和 CMediaTrack中。我觉得这里CMediaExtractor -> MediaExtractorPluginHelper 所用到的设计模式应该算是外观模式。

我并不是很理解为什么要设计中间层 CMediaExtractor 和 CMediaTrack,拿掉它们同样可以实现抽象与多态,如果有大神理解可以指点我一下。

http://www.dtcms.com/wzjs/596495.html

相关文章:

  • 济南建设网站公司建立网站公司有哪些
  • 动态设计参考网站wordpress 页面查询
  • 兴仁市建设局网站潍坊免费模板建站
  • 企业网站可信度建设长春建站的费用
  • 企业在阿里做网站是什么意思电商网站对比
  • 绍兴做网站哪家好博客网站模板有哪些
  • 初创品牌网站建设好男人社区
  • wordpress 提示插件贵州网站优化
  • 南海区住房城乡建设和水务局网站优化设计答案六年级
  • 金昌网站建设专门做spa的网站
  • wordpress下载资源站主题深圳网络营销推广外包
  • 哪里做网站需求南京汽车企业网站建设
  • 漳州做网站喊多少钱phpcms资讯类网站模板
  • 网站推广指的是什么自媒体素材视频网站
  • 武威市建设局网站企业历史展厅设计
  • 产品网站策划地方门户网站如何盈利
  • 免费地图制作网站滨江区高端网站建设
  • 专业建网站 优帮云好用的网页设计软件
  • 建设监理工程师网站小型求职招聘网站源码 php
  • 新乡做网站哪家好wordpress固态链接
  • 广州外贸网站公司wordpress在线监测
  • 网站建设的风险预测微信小程序入门开发
  • 做seo网站图片怎么优化seo关键词排名技巧
  • 手机建站平台可上传自己视频做企业网站需要提供什么
  • 正邦的网站建设wordpress dux1.4
  • 大自然的网站设计网站建设的项目说明书
  • 在线设计响应式网站系统定制开发
  • 如何设计好酒店网站模板cms页面
  • 网站怎么做投票商城类网站用什么做
  • 网站开发和优化关系八大建筑央企排名