最近在 REAL210 android 上调试 CAMERA 驱动。发现原来的
开发板只支持 640*320 以及 320*240 ,但是用的是 OV3640 300W 的摄像头,应该可以拍照到 2048*1536 的分辨率的。
索性把这个 300W 打开吧。
1、看看这里是否支持 300W 的分辨率,原生 ANDROID 是支持到 500W 的。
packages/apps/Camera/res/values/strings.xml
<string name="pref_camera_picturesize_entry_2592x1936">5M Pixels</string> <string name="pref_camera_picturesize_entry_2048x1536">3M Pixels</string> <string name="pref_camera_picturesize_entry_1600x1200">2M Pixels</string> <string name="pref_camera_picturesize_entry_1024x768">1M Pixels</string> <!--<string name="pref_camera_picturesize_entry_640x480" translatable="false">VGA</string>--> <!--<string name="pref_camera_picturesize_entry_320x240" translatable="false">QVGA</string>--> <string name="pref_camera_picturesize_entry_640x480">640 X 480</string> <string name="pref_camera_picturesize_entry_320x240">320 X 240</string>
2、设置 CAMERA 的最大分辨率
device/samsung/proprietar/libcamera/SecCamera.h
const struct camera_info s5k4ba_info = { 640, // max_preview_width 480, // max_preview_height 2048, // max_snapshot_width 1536, // max_snapshot_height }
完成以上两步在 CAMERA 界面就可以见到 300W 的选择了。
当选择了 300W 拍照后 系统卡住不动了,通过跟踪发现是 device/samsung/proprietar/libs3cjpeg/JpegEncode.cpp ---> encode_jpg(struct s5pc110_jpg_ctx *jpg_ctx, struct jpg_enc_proc_param *enc_param)这个函数里面申请的图片 SIZE 大于允许的范围了。
最后修改 device/samsung/proprietar/libs3cjpeg/jpeg.h
#define MAX_JPG_WIDTH 2048 #define MAX_JPG_HEIGHT 1536
设置这个最大 SIZE 即可。
但是拍照的时候还是卡住了,通过跟踪发现和 内核的 JPEG 驱动有关,进入 JPEG 驱动后发现允许的最大 分辨率是 800*480,把这个 SIZE 设置成 2048*1536即可。
#ifdef CONFIG_VIDEO_JPEG_V2 static struct s3c_platform_jpeg jpeg_plat __initdata = { .max_main_width= 2048, .max_main_height= 1536, .max_thumb_width= 320, .max_thumb_height= 240, }; #endif
然后再把申请的内存空间放大
#define S5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG (14336 * SZ_1K)
注意:device/samsung/proprietar/libs3cjpeg/jpeg.h里面的 JPG_TOTAL_BUF_SIZE < S5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG
通过以上的修改已经可以实现 300W 的拍照了,但是感觉拍出来的照片和 100W 的效果差不多,就是图片的 SIZE 变大了。
转载自:http://blog.csdn.net/Baiduluckyboy/article/details/7658230