前一篇的博文介绍了:Android调用JNI的简单实例(附详细步骤),现在带来一个进阶版的,虽然时间隔得有点久远。
这里要说下,尽量不要用Java写编解码的东西,就算你是大神,你写的出来,但那也是不实用的,就像切西瓜一样,拿一把削水果刀去切西瓜,肯定比不上用西瓜刀方便吧,还是老老实实写个JNI调用得了,也不复杂C/C++方便的很,当然,这里不是说Java不行,语言只是工具,做什么事情用什么语言,没必要硬着头皮往上顶对吧。纯属个人观点,大神可以无视。
好了进入正题,该实例主要内容:开启摄像头预览,将获取到的视频帧YUV数据,通过JNI调用C的转码函数转为RGB类型数据然后返回,在自定义控件上绘制播放。
1、工程结构:
该工程是在之前的SimpleJni实例上进行修改的,简单描述一下功能:
CameraEngineActivity主界面,用于加载控件及渲染等;
CameraView摄像头预览控件,用于预览及捕获视频帧YUV数据;
ImageUtilEngine声明调用C函数的接口类,声明native的C函数;
SporeRender渲染画面类,用于绘制图像;
Texture2D图像优化类,用于优化图像纹理;
Demo地址:
2、新建java调用C函数的接口类
package com.eric.complexjni;
/*
*@author Eric
*@2015-12-7下午4:35:18
*/
public class ImageUtilEngine {
static {
System.loadLibrary("");
}
public native int[] decodeYUV420SP(byte[] buf, int width, int heigth);
}
3