JpegEncoder.create() Error
平台:s5pc110
系统:android2.3.4
一,错误信息:
V/SecCamera(68): int android::fimc_v4l2_streamoff(int) :
E/JpegEncoder(68): bool android::JpegEncoder::create()xu_bin :
E/JpegEncoder(68): xu_bin test JPG_TOTAL_BUF_SIZE = 0x918000
E/JpegEncoder(68): Failed to mmap
E/SecCamera(68): JpegEncoder.create() Error
E/CameraHardwareSec(68): ERR(int android::CameraHardwareSec::pictureThread()):Fail on SecCamera->getSnapshotAndJpeg()
二,问题分析:
1,mmap失败原因,就是所分配的内存太小,找到内存分配的地方,一般都在make menuconfig中分配的如下:
(1),位置
(2),设定,我们JPEG分配的大小为40960KB
2,看上面的情况,应该有足够的空间来分配的,我们在上面打印信息中可以看到需求的空间
E/JpegEncoder(68): xu_bin test JPG_TOTAL_BUF_SIZE =0x918000(大小为9.09M)
我们分配了40M的内存
3,最后对比代码时发现一个问题,一般内存在make menuconfig中分配,可是这个BSP有点不一样,他在mach-smdkc110中设定,如下:
//#defineS5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG(8192*SZ_1K)//原来大小小于9M,所以不行
#defineS5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG(10240*SZ_1K)//更改后在的大小 。
4,再看下mach-t34h.c中对JPEG内存大小设定为:
#ifdefCONFIG_VIDEO_SAMSUNG_MEMSIZE_JPEG
{
.id=S5P_MDEV_JPEG,
.name="jpeg",
.bank=0,
.memsize=CONFIG_VIDEO_SAMSUNG_MEMSIZE_JPEG*SZ_1K,
.paddr=0,
},
#endif
上面红色的为内存大小的宏,这个宏在autoconf.h中实现,对应用就是make menuconfig中的设定。
以上为工作中遇到的问题,希望对遇到相同问题的朋友有所帮助!