H264解码器移植到OPhone

本文详细介绍了如何将H264解码器移植到OPhone平台,包括移植目标、面向人群、开发环境的配置,如Eclipse、Cygwin、Android NDK和OPhone SDK的安装,以及关键步骤如封装Java接口、C语言实现本地方法的编译和测试。通过此教程,开发者可以了解如何在OPhone上实现C/C++核心库的移植。
摘要由CSDN通过智能技术生成

注:原版发布于OphoneSDN,如需转载请参考OPhoneSDN版权声明

目录

目录... 2

1     移植目标... 3

2     面向人群... 4

3     假定前提... 4

4     开发环境... 5

4.1     安装Eclipse. 5

4.2     安装Cygwin. 5

4.3     安装Android NDK. 6

4.4     安装OPhone SDK. 6

4.5     安装OPhone插件... 6

5     移植过程... 7

5.1     移植流程... 7

5.2     封装Java接口... 7

5.3     使用C实现本地方法... 9

5.3.1       生成头文件... 9

5.3.2       实现本地方法... 10

5.3.3       编译本地方法... 12

5.4     编写库测试程序... 15

5.5     集成测试... 20

1          移植目标

H264解码器移植到Android操作系统之上(NDK+C),并写一个测试程序(OPhoneSDK+Java)测试解码库是否正常运行,下面是解码时的截图:

 

图片

OPhone的模拟器和Mobile的模拟器一样是模拟ARM指令的,不像Symbian模拟器一样执行的是本地代码,所以在模拟器上模拟出来的效率会比真实手机上的效率要低,之前这款解码器已经优化到在nokia 6600(相当低端的一款手机,CPU主频才120HZ)上做到在线播放。

2          面向人群

本文面向有一定的手机应用开发经验(例如:S60/Mobile/MTK)和有一定的跨手机平台移植经验的人员,帮助她们了解一个企业的核心库(C/C++)是怎么移植到OPhone之上的。

3          假定前提

1、  你熟悉Java/C/C++语言;

2、  你熟悉JavaJNI技术;

3、  你有一定的跨手机平台移植经验;

4、  你有一套可供移植的源代码库,这里我以H264解码库为例,这里因为版权问题,这里只能够公开头文件:

#ifndef __H264DECODE_H__

#define __H264DECODE_H__

 

#if defined(__SYMBIAN32__)      //S602rd/3rd/UIQ

         #include <e32base.h>

         #include <libc/stdio.h>

         #include <libc/stdlib.h>

         #include <libc/string.h>

#else                                                //Windows/Mobile/MTK/Android

         #include <stdio.h>

         #include <stdlib.h>

         #include <string.h>

#endif

 

class H264Decode

{

public:

         /***************************************************************************/

         /* 构造解码器                                                                                                                            */

         /* @return H264Decode解码器实例                                                                                         */

         /***************************************************************************/

         static H264Decode *H264DecodeConstruct();

         /***************************************************************************/

         /* 解码一帧                                                                                                                                */

         /* @pInBuffer    指向H264的视频流                                                                                      */

         /* @iInSize         H264视频流的大小                                                                                       */

         /* @pOutBuffer 解码后的视频视频                                                                                         */

         /* @iOutSize      解码后的视频大小                                                                                         */

         /* @return           已解码的H264视频流的尺寸                                                                      */

         /***************************************************************************/

         int DecodeOneFrame(unsigned char *pInBuffer,unsigned int iInSize,unsigned char *pOutBuffer,unsigned int &iOutSize);

         ~H264Decode();

};

#endif  // __H264DECODE_H__

 

你不用熟悉Android系统,因为在此之前,我也不熟悉;

 

4          开发环境

4.1      安装Eclipse

下载Eclipse Classic 3.5.0 (162 MB) + CDT,并安装它,安装非常简单,这里就不详细介绍了。

4.2      安装Cygwin

Cygwin是一个在windows平台上运行的unix模拟环境,这个东东是移植常用到的工具,比较大,下载安装很简单。点击下载

 

FAQ 1

 

测试NDK环境,如果遇到下面问题怎么办?

 

图片

请检查你的make版本是否为3.81,如果不是,请升级你的Cygwin版本,我就是因为这个原因,折腾了半天。

 

4.3      安装Android NDK

简单来说NDK是让开发者使用传统的C/C++语言编写Android模块的一个开发包,目前NDK还不支持编写有界面的应用程序,只能够用来编写一些动态链接库。点击下载

4.4      安装OPhone SDK

参见OPhone SDN官方教程《安装OPhone SDK

4.5      安装OPhone插件

安装Eclipse插件ADTWDT,参见OPhone SDK官方教程《安装Eclipse插件ADT》《安装Eclipse插件WDT

5          移植过程

5.1      移植流程

 

图片

5.2      封装Java接口

在《假定前提》中提到了要移植的函数,接下来会编写这些函数的Java Native Interface

/**  

* @author panzhenyu

* @email panzhenyu88@gmail.com

*/

 

package panzhenyu.streaming.video.h264;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值