Android的多媒体框架OpenCore介绍 第3页|IT168 技术开发

2010-01-26 | 藏家:ydyuhu
  Android的多媒体框架OpenCore介绍
责任编辑:徐威特作者:IT168 hanchao3c   2009-04-02   来源:IT168网站
【内容导航】 第1页:第一部分 OpenCore概述
第2页:第二部分 OpenCore的代码结构
第3页:第三部分 OpenCore OSCL简介
第4页:第四部分 文件格式处理和编解码部分简介
文本Tag: Android
第三部分 OpenCore OSCL简介
OSCL,全称为Operating System Compatibility Library (操作系统兼容库),它包含了一些在不同操作系统中移植层的功能,其代码结构如下所示:
oscl/oscl
|-- config             :配置的宏
|-- makefile
|-- makefile.pv
|-- osclbase         :包含基本类型、宏以及一些STL容器类似的功能
|-- osclerror        :错误处理的功能
|-- osclio             :文件IO和Socket等功能
|-- oscllib            :动态库接口等功能
|-- osclmemory :内存管理、自动指针等功能
|-- osclproc         :线程、多任务通讯等功能
|-- osclregcli        :注册客户端的功能
|-- osclregserv     :注册服务器的功能
`-- osclutil           :字符串等基本功能
在oscl的目录中,一般每一个目录表示一个模块。OSCL对应的功能是非常细致的,几乎对C语言中每一个细节的功能都进行封装,并使用了C++的接口提供给上层使用。事实上,OperCore中的PVMF、Engine部分都在使用OSCL,而整个OperCore的调用者也需要使用OSCL。
在OSCL的实现中,很多典型的C语言函数被进行了简单的封装,例如:osclutil中与数学相关的功能在oscl_math.inl中被定义成为了内嵌(inline)的函数:
OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_log(double value)
{
return (double) log(value);
}
OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_log10(double value)
{
return (double) log10(value);
}
OSCL_COND_EXPORT_REF OSCL_INLINE double oscl_sqrt(double value)
{
return (double) sqrt(value);
}
oscl_math.inl文件又被oscl_math.h所包含,因此其结果是oscl_log()等功能的使用等价于原始的log()等函数。
很多C语言标准库的句柄都被定义成为了C++类的形式,实现由一些繁琐,但是复杂性都不是很高。以oscllib为例,其代码结构如下所示:
oscl/oscl/oscllib/
|-- Android.mk
|-- build
|   `-- make
|       `-- makefile
`-- src
|-- oscl_library_common.h
|-- oscl_library_list.cpp
|-- oscl_library_list.h
|-- oscl_shared_lib_interface.h
|-- oscl_shared_library.cpp
`-- oscl_shared_library.h
oscl_shared_library.h是提供给上层使用的动态库的接口功能,它定义的接口如下所示:
class OsclSharedLibrary
{
public:
OSCL_IMPORT_REF OsclSharedLibrary();
OSCL_IMPORT_REF OsclSharedLibrary(const OSCL_String& aPath);
OSCL_IMPORT_REF ~OsclSharedLibrary();
OSCL_IMPORT_REF OsclLibStatus LoadLib(const OSCL_String& aPath);
OSCL_IMPORT_REF OsclLibStatus LoadLib();
OSCL_IMPORT_REF void SetLibPath(const OSCL_String& aPath);
OSCL_IMPORT_REF OsclLibStatus QueryInterface(const OsclUuid& aInterfaceId, OsclAny*& aInterfacePtr);
OSCL_IMPORT_REF OsclLibStatus Close();
OSCL_IMPORT_REF void AddRef();
OSCL_IMPORT_REF void RemoveRef();
}
这些接口显然都是与库的加载有关系的,而在oscl_shared_library.cpp 中其具体的功能是使用dlopen()等函数来实现的。
点此发表你的看法>>【已有0位网友发表了看法】
上一页123
4下一页

评论

  • 暂无评论,快来抢沙发!

我来评论