`
suiyuchen
  • 浏览: 30471 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android多媒体框架OpenCore(PacketVideo)介绍之二:OSCL和文件编解码

阅读更多

第三部分 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()等函数来实现的。
第四部分 文件格式处理和编解码部分简介
在多媒体方面,文件格式的处理和编解码(Codec)是很基础的两个方面的内容。多媒体应用的两个方面是媒体的播放(PlayBack)和媒体的记录(Recording)。
在媒体的播放过程中,通常情况是从对媒体文件的播放,必要的两个步骤为文件的解析和媒体流的解码。例如对于一个mp4的文件,其中可能包括AMR和AAC 的音频流,H263、MPEG4以及AVC(H264)的视频流,这些流被封装在3GP的包当中,媒体播放器要做的就是从文件中将这些流解析出来,然后对媒体流进行解码,解码后的数据才可以播放。
在媒体的记录过程中,通过涉及到视频、音频、图像的捕获功能。对于将视频加音频录制成文件功能,其过程与播放刚好相反,首先从硬件设备得到视频和音频的媒体流,然后对其进行编码,编码号的流还需要被分层次写入到文件之中,最终得到组成好的文件。OpenCore有关文件格式处理和编解码部分两部分的内容,分别在目录fileformats和codecs_v2当中。这两部分都属于基础性的功能,不涉及具体的逻辑,因此它们被别的模块调用来使用,例如:构建各种Node。
4.1 文件格式的处理

由于同时涉及播放文件和记录文件两种功能,因此OpenCore中的文件格式处理有两种类型,一种是parser(解析器),另一种是composer(组成器)。
fileformats的目录结构如下所示:
fileformats
|-- avi
| `-- parser
|-- common
| `-- parser
|-- id3parcom
| |-- Android.mk
| |-- build
| |-- include
| `-- src
|-- mp3
| `-- parser
|-- mp4
| |-- composer
| `-- parser
|-- rawaac
| `-- parser
|-- rawgsmamr
| `-- parser
`-- wav
`-- parser
目录包含各个子目录中,它们对应的是不同的文件格式,例如mp3、mp4和wav等。
4.2 编解码

编解码部分主要针对Audio和Video,codecs_v2的目录结构如下所示:
codecs_v2
|-- audio
| |-- aac
| |-- gsm_amr
| |-- mp3
| `-- sbc
|-- omx
| |-- factories
| |-- omx_aac
| |-- omx_amr
| |-- omx_common
| |-- omx_h264
| |-- omx_m4v
| |-- omx_mp3
| |-- omx_proxy
| `-- omx_queue
|-- utilities
| |-- colorconvert
| |-- m4v_config_parser
| `-- pv_video_config_parser
`-- video
|-- avc_h264
`-- m4v_h263
在audio 和video目录中,对应了针对各种流的子目录,其中可能包含dec和enc两个目录,分别对应解码和编码。video目录展开后的内容如下所示:
`-- video
|-- avc_h264
| |-- common
| |-- dec
| |-- enc
| `-- patent_disclaimer.txt
`-- m4v_h263
|-- dec
|-- enc
`-- patent_disclaimer.txt
codecs_v2目录的子目录omx实现了一个khronos,OpenMAX的功能。OpenMAX是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出。OpenMAX IL 1.0(集成层)技术规格定义了媒体组件接口,以便在嵌入式器件的流媒体框架中快速集成加速式编解码器。OpenMAX的设计实现可以让具有硬件编解码功能的平台提供统一的接口和框架,在OpenMAX中可以直接使用硬件加速的进行编解码乃至输出的功能,对外保持统一的接口。但是在此处的OpenMAX则是一个纯软件的实现。

分享到:
评论

相关推荐

    Android的多媒体框架OpenCore介绍

    Android的多媒体框架OpenCore是Android系统中的核心组件之一,用于处理多媒体内容的播放和录制。OpenCore最初由PacketVideo公司开发,后来成为Android系统的一部分。本文将深入探讨OpenCore的结构、功能及其与...

    Android的多媒体框架OpenCore(PacketVideo)介绍

    ### Android的多媒体框架OpenCore(PacketVideo)介绍 #### 一、OpenCore概述 OpenCore,也常被称为PacketVideo,是Android系统中的多媒体核心组件。它由PacketVideo公司开发,旨在为Android平台提供全面的多媒体...

    Android的多媒体框架OpenCore(PacketVideo)

    【Android的多媒体框架OpenCore(PacketVideo)】 OpenCore,又称PacketVideo,是Android系统中的多媒体核心组件,负责处理音频和视频的播放及录制。它是一个由C++编写的复杂框架,提供了高度可移植的系统层,使得...

    Android的多媒体框架OpenCore介绍.pdf

    Android的多媒体框架OpenCore是Android系统中用于处理多媒体内容的核心组件,它提供了全面的多媒体播放和录制功能。OpenCore最初由PacketVideo公司开发,后来成为Android系统的一部分。在Android开发者社区中,...

    Android多媒体框架分析.pdf

    基于 PacketVideo 公司的 OpenCORE 平台,多媒体框架提供了一套通用的可扩展接口,支持所有通用的音频、视频、静态图像格式的编解码器(CODEC),并且可以方便地支持硬件/软件编解码器插件。 多媒体框架架构: 在 ...

    Android多媒体框架初步分析

    OpenCORE平台是Android多媒体框架的核心组件之一,由PacketVideo公司提供,用于实现多媒体功能,如音视频采集、播放、视频会议等功能。它提供了一套通用且可扩展的接口,便于第三方多媒体编解码器、输入输出设备等的...

    Android多媒体框架分析

    - **基础实现**:Android多媒体框架基于第三方PacketVideo公司的OpenCORE平台实现。 - **功能支持**:支持常见的音频、视频、静态图像格式。 - **扩展性**:通过OpenMAX 1L interface接口进行扩展,便于硬件/软件编...

    深入浅出android多媒体

    ### 深入浅出Android多媒体——OpenCore框架详解 #### 一、OpenCore框架概览 ##### 1.1 OpenCore定义与地位 - **名称解析**:OpenCore,通常也被称作PacketVideo(PV),是Android多媒体的核心组件。PacketVideo...

    Android多媒体核心及其插件

    - OpenCore和Stagefright作为主要的多媒体引擎,各有特点并支持多种类型的插件。 - 多媒体插件的移植主要集中在输入输出环节和编解码环节。 - 媒体播放器与录制器是实现多媒体功能的关键组件,它们的结构与功能有所...

    Android--多媒体架构[参照].pdf

    OpenCore是Android多媒体框架的核心,它位于External/Opencore目录下,包含多个子目录,如android(提供Android使用的接口)、baselibs(底层库,包含数据结构和线程安全等)、codecs_v2(音视频编解码器)、engines...

    Android多媒體框架初步分析

    这个框架建立在PacketVideo公司的OpenCORE平台上,为开发者提供了强大的多媒体处理能力。OpenCORE是一个综合的多媒体平台,能够支持多种编码解码器(codec),包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等常见...

Global site tag (gtag.js) - Google Analytics