JPEG解码--(2)读数据的底层依赖库

  本人所开发的MiniJpegDecoder项目,主要分为两层,一层是底层依赖库,另一层是包含jpeg解码逻辑的应用层。git

其实,分三层的话结构更为合理:底层库+解码库+应用层。但因为目前没时间维护这个库,等何时空闲了再优化一下结构吧。github

  今天介绍的主要是两层结构的底层库——libcodec_utils.so。网络

1. 源码组成函数

  源码树结构以下:工具

utils$ tree
.
|-- ABitReader.cpp
|-- AString.cpp
|-- DataSource.cpp
|-- FileSource.cpp
|-- Makefile
`-- types_def.cpp优化

  须要说明的是,这几个cpp文件都是来源于Android SDK,位于framesworks/av/media目录下。spa

2. 各模块说明code

  ABitReader——一个按二进制位读写/查询数据的工具,例如读取2bit二进制位,或者跳过3bit,或者查询当前读的bit位置的offset。接口

  AString——一个用于字符操做的工具,例如追加/插入字符串,或查找某个子字符串。开发

  DataSource——FileSource的父类,用于抽象读取数据的接口。

  FileSource——读本地文件的工具,是对open/read系统调用的一层抽象,未使用fopen/fread的标准C库函数。

  types_def——64位整形数据转换为网络字节序。

3. 为何增长加这个底层库?

  JpegDecoder模块做为高层模块,指望从本地文件中,按位读取数据再去解码,重点是处理解码逻辑,而不但愿看到底层细节处理操做,例如

从文件中如何读若干Bytes数据,再一个个bit位的逻辑操做。所以使用了这些底层子模块,去实现按bit位读取、跳若干bit位、查询当前位在文件中

的offset等底层细节问题。

  即高层模块只处理高层的业务逻辑,底层只处理底层的业务逻辑,避免眉毛鼻子一把抓。

  底层只负责读文件数据,按bit位方式拿数据。

4. 有无替代方案?

  在作这个h264_tools工具时,找到了x264实现的按bit位读取数据的模块——bs_read,这个应该是更简洁和高效一些吧。

相关文章
相关标签/搜索