Android系统camera模块调试完成
2010-08-31 11:21
232 查看
第一步:按照上一个日志的步骤,用自己的libcamera替换stub的camera。
第二步:配置视频方式,由于ZC0301输出的视频数据只能是jpeg的,而Android系统带的camera的应用程序预览只能是RGB或者YCbCr的,目前只调试成功RGB565,(YCbCr方式预览窗口不能显示正确的颜色)所以如下配置:
UsbCamera.cpp
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG;
MyCameraHardware.cpp
p.setPreviewFormat("rgb565");//("yuv422sp");
p.setPictureFormat("jpeg");//("jpeg");
CameraService.cpp
ISurface::BufferHeap buffers(w, h, w, h,PIXEL_FORMAT_RGB_565, transform,0,
mHardware->getPreviewHeap());
第二步:按照V4l2编程要求的步骤,使用mmap方式的调用,并需要在析构函数中调用munmap函数。
第三步:每次上层调用获取数据时,再获取数据,底层不使用任务持续获取。
第四步:数据是JPEG拍照可以直接保存,但是预览就需要解码成rgb,于是增加libjpeg共享库。由于该共享库只解码文件,这里需要的是解码内存中的jpeg,所以增加内存jpeg的解码。详情见下一个日志
第五步:至此,就完成了这个工作。
需要注意的地方:
1、显示窗口的大小设置:经过测试发现设置成320*240是最佳的,如果设置成640*480,可以显示,但是明显比较慢,由于拍照的时候和预览的时候,都是将数据拷贝到别的模块,所以运行很吃力。如果设置成480*360,预览窗口显示不正常,会并列3个小窗口。
2、cpp文件调用c文件的函数时,一定要用extern ,否则编译连接会报错。
extern "C"{
#include "jpeglib.h"
}
3、进行jpeg解码时候,jpeg_read_header(&cinfo, 1);获取的cinfo信息里面的cinfo.num_components不正确,实际是2,获取的却是3,所以计算偏移的时候不能使用offset += cinfo.num_components * cinfo.output_width;而必须使用offset += 2 * cinfo.output_width;
需要改进的地方:
1、预览使用overlay方式,一定会快很多。
2、camera java应用程序的权限要改,正常启动程序,居然不能open video0
3、拍照时memcpy数据,效率太低,最好能够直接存成文件,不知道其他的camera应用程序怎么处理的。
第二步:配置视频方式,由于ZC0301输出的视频数据只能是jpeg的,而Android系统带的camera的应用程序预览只能是RGB或者YCbCr的,目前只调试成功RGB565,(YCbCr方式预览窗口不能显示正确的颜色)所以如下配置:
UsbCamera.cpp
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG;
MyCameraHardware.cpp
p.setPreviewFormat("rgb565");//("yuv422sp");
p.setPictureFormat("jpeg");//("jpeg");
CameraService.cpp
ISurface::BufferHeap buffers(w, h, w, h,PIXEL_FORMAT_RGB_565, transform,0,
mHardware->getPreviewHeap());
第二步:按照V4l2编程要求的步骤,使用mmap方式的调用,并需要在析构函数中调用munmap函数。
第三步:每次上层调用获取数据时,再获取数据,底层不使用任务持续获取。
第四步:数据是JPEG拍照可以直接保存,但是预览就需要解码成rgb,于是增加libjpeg共享库。由于该共享库只解码文件,这里需要的是解码内存中的jpeg,所以增加内存jpeg的解码。详情见下一个日志
第五步:至此,就完成了这个工作。
需要注意的地方:
1、显示窗口的大小设置:经过测试发现设置成320*240是最佳的,如果设置成640*480,可以显示,但是明显比较慢,由于拍照的时候和预览的时候,都是将数据拷贝到别的模块,所以运行很吃力。如果设置成480*360,预览窗口显示不正常,会并列3个小窗口。
2、cpp文件调用c文件的函数时,一定要用extern ,否则编译连接会报错。
extern "C"{
#include "jpeglib.h"
}
3、进行jpeg解码时候,jpeg_read_header(&cinfo, 1);获取的cinfo信息里面的cinfo.num_components不正确,实际是2,获取的却是3,所以计算偏移的时候不能使用offset += cinfo.num_components * cinfo.output_width;而必须使用offset += 2 * cinfo.output_width;
需要改进的地方:
1、预览使用overlay方式,一定会快很多。
2、camera java应用程序的权限要改,正常启动程序,居然不能open video0
3、拍照时memcpy数据,效率太低,最好能够直接存成文件,不知道其他的camera应用程序怎么处理的。
相关文章推荐
- Android系统移植与调试之-------)如何修改Android手机NFC模块,使黑屏时候能够使用NFC
- Android系统移植与调试之------->如何修改Android手机NFC模块,使黑屏时候能够使用NFC
- Android_照相机Camera_调用系统照相机返回data为空
- 高通Android平台硬件调试之Camera
- 从零开始--系统深入学习android(理论--开发前准备--开发入门--DDMS调试)
- Android系统之路(初识MTK) ------ (详细精华)添加客供系统壁纸去除系统动态壁纸/Camera默认fine/remove android beam
- mac 系统开发android,真机调试解决方式(无数的坑之后吐血总结)
- Android_照相机Camera_使用intent调用系统照相机在onActivityResult返回data为空
- Android系统移植与调试之------->MTK 标准编译命令
- Android系统编译及单模块编译简介
- android开发中系统自带语音模块的使用
- 红米怎么打开USB调试(Android4.2.2),系统中隐藏开发者选项(红米,MTK6589,三星i9500 /S4打开开发者选项)
- Android Camera系统
- Android系统移植与调试之------->build.prop文件详细赏析
- Android 系统下camera的特效添加步骤
- Android_ADB_通过WIFI或USB方式完成调试
- 用Android系统自带的安装apk的api安装应用完成后点击图标总是从第一个activity开始
- android系统本地码调试
- Android系统之闹钟模块浅析
- Android系统移植与调试之------->build.prop文件详细赏析