最近看了一篇International Symposium on Consumer Electronics会议上的文章,标题是Google’s Android as an application environment for DTV decoder system。做一下简单的记录。
文章主要讲述如何使用ANDROID系统作为DTV的软件环境。包括移植ANDROID系统至文中提到的DTV平台,以及怎么在ANDROID系统上实现DTV电视搜索,回放记录等功能。
移植Android系统到大端MIPS平台需要三个步骤:
Linux内核移植:
如下驱动必须被集成:
ASHMEM(匿名共享内存)同POSIX SHM 但是有不痛的行为,它支持简单的基于文件映射的API
BINDER 类似CORBA的IPC通信机制。
Android event logger LINUX 用于在内核中记录DEBUG消息的LINUX驱动
Android 环境修改
Android系统已经成功移植到小端MIPS平台上(如8655)。但是由于大端小段的区别,修改也是很多的。
Android DFB支持
DFB是基于FB的轻量级图形库,提供图形加速及输入设备支持。
Android 支持标准的FB。DTV SOC提供商实现了DFB的硬件加速。ANDROID系统对DFB的支持实现遍及系统不同层次。首先支持UI的绘制,第二,通过图形硬件加速绘制图形。
使用DFB作为UI 图形缓冲的缺点是不支持3D加速。
多媒体及DTV回放支持
这部分解释对ANDROID 运行环境和软件框架的修改区支持DTV和多媒体设备控制。
因为CPU能力不足不直接使用Android 运行库 android.media。为了支持硬件加速多媒体重放,媒体框架将增加选项扩展支持硬件处理。解码和现在的多媒体数据 通过事件通知ANDROID.通过增加额外的硬件插件机制。MMLIB
MMLIB为ANDROID多媒体对象和硬件加速平台解码器的粘合层。它位于android_media_MediaPlayer JNI对象中。MMLIB接口的初始化通过硬件平台插件硬件信息并且存储适当的播放接口。
使用提供支持的信息,媒体播放对象发送多媒体指令,MMLIB解释处理命令并且选择接口。如果没有硬件加速支持的命令MMLIB直接将命令传到OPENCORE的库。
因为平台支持多种音视频,所以需要多个插件。
DTV频道记忆及搜索
DTV 包括不同的前端设备提供模拟或者数字频道的再现。采用ANDROID编程的方式,引进两个JAVA类:一个用户接口和一个JNI对象支持本地频道服务。
引进的对象包括:
这个服务线程运行在后台进程中使用了JNI接口。主函数收集修改前端设备平台的信息和能力。第2个函数异步支持手动自动频道搜索等。将信息存储在后台的数据结构中。
接口作为频道服务子系统的大门。它实现了一些有用的函数和对象。因为同时可以有多个TV程序在跑所以必须设计实现了异步接口。
为了使用这个程序,需要实现这些接口:频道JNI接口。这个接口链接本地平台前端结构和实现的JAVA频道服务。它提供查询平台能力和获取频道前端服务信息的能力。这个借口编译链接成一个共享对象。从JAVA对象中动态打开,检查是否支持已经在平台中的频道消息。
电视频道的回放及录制。
直接实现一个MMLIB DTV PLUG-IN就可以了。