wince 6 使用500W摄像头拍照占用内存过大问题

一介布衣萧萧 2013-06-24 11:20:21
使用环境:
CPU:6410
RAM: 256M (运行内存150M左右)
系统:WINCE 6.0
摄像头:5M(500万,最大像素2592*1944)

现象描述:
设置摄像头输出为2592*1944,buffer都设到足够大(2592*1944*2),预览设置为2592*1944,使用DSHOW程序控制摄像头。
DSHOW程序中只要设置
CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));
就会发现占用内存过大(已使用内存超过120M),这时,无法预览成功。屏蔽掉这一句之后可以预览成功,但不能进行拍照。
而我把这个摄像头设置为300W的时候,一切正常,设置到500W就出现这样的问题。设置为300W的时候,已使用的内存达到130多M。
300W和500W占用的内存对比,发现500W的少于300W的,同时从调试信息中看到,500W那个无法预览的时候,申请内存还有一次没有出现。

得出结论:内存不足,无法支持到500W摄像头。

请问各位有没有遇到占用内存过大的问题,有解决的方法吗?
在网上看到有的人说这个是三星camera的bug,不知道是否如此?


我试过预览使用低分辨,拍照那一下才重新配置为500W/300W,拍完之后,再重新配置为低分辨率进行预览。发现情况依旧。
期待各位高手、大大出现
...全文
498 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbstr 2013-06-25
  • 打赏
  • 举报
回复
首先找fae要配置成jpg输出的寄存器设置,然后在切换到still模式时将这组设置写到sensor里。最后在中断里接收jpg的头和尾,把里面的数据传给应用层,用ijpg模式,这个wince和wm6都是支持的
xuke537 2013-06-25
  • 打赏
  • 举报
回复
所以输出格式是YUV420! m_pImageSinkFilter显示图像的时候是否能够支援到2592X1944这么大的分辨率。
一介布衣萧萧 2013-06-25
  • 打赏
  • 举报
回复
引用 6 楼 xuke537 的回复:
请问楼主是什么图像格式输出?YUY2还是MJPG? MJPG 5M在电脑上也无法预览,因为Dshow自带的MJPG decoder是无法解码5M及5M以上的分辨率! YUY2格式输出,不存在解码的问题,内存开销也少,处理5M图像一块buffer需要5x2=10M内存。 RGB图像输出一般是由MJPG解码的,RGB图像占用内存也比Yuy2多,一帧需要5x3=15M内存。
MAKE_STREAM_MODE_YV12(DCAM_StreamMode_10, 2592, -1944, 12, 15); #define MAKE_STREAM_MODE_YV12(StreamModeName, DX, DY, DBITCOUNT, FRAMERATE) \ CS_DATARANGE_VIDEO StreamModeName = \ { \ { \ sizeof (CS_DATARANGE_VIDEO), \ 0, \ SAMPLESIZE(DX,DY,DBITCOUNT), \ 0, \ STATIC_CSDATAFORMAT_TYPE_VIDEO, \ MEDIASUBTYPE_YV12, \ STATIC_CSDATAFORMAT_SPECIFIER_VIDEOINFO \ }, \ \ TRUE, \ TRUE, \ CS_VIDEOSTREAM_CAPTURE, \ 0, \ \ { \ STATIC_CSDATAFORMAT_SPECIFIER_VIDEOINFO, \ CS_AnalogVideo_None, \ DX,DY, \ DX,DY, \ DX,DY, \ 1, \ 1, \ 1, \ 1, \ DX, DY, \ DX, DY, \ DX, \ DY, \ 0, \ 0, \ 0, \ 0, \ REFTIME_##FRAMERATE##FPS, \ REFTIME_##FRAMERATE##FPS, \ BITRATE(DX,DY,DBITCOUNT,FRAMERATE) / 8, \ BITRATE(DX,DY,DBITCOUNT,FRAMERATE), \ }, \ \ { \ 0,0,0,0, \ 0,0,0,0, \ BITRATE(DX,DY,DBITCOUNT,FRAMERATE), \ 0L, \ REFTIME_##FRAMERATE##FPS, \ sizeof (CS_BITMAPINFOHEADER), \ DX, \ DY, \ 3, \ DBITCOUNT, \ FOURCC_YV12 | BI_SRCPREROTATE, \ SAMPLESIZE(DX,DY,DBITCOUNT), \ 0, \ 0, \ 0, \ 0, \ 0, 0, 0 \ } \ }; 就是这样子配置,300W的OK,500W的不行
一介布衣萧萧 2013-06-25
  • 打赏
  • 举报
回复
引用 5 楼 bbstr 的回复:
首先找fae要配置成jpg输出的寄存器设置,然后在切换到still模式时将这组设置写到sensor里。最后在中断里接收jpg的头和尾,把里面的数据传给应用层,用ijpg模式,这个wince和wm6都是支持的
等忙完手头的项目,测试一下看看可行否
xuke537 2013-06-25
  • 打赏
  • 举报
回复
请问楼主是什么图像格式输出?YUY2还是MJPG? MJPG 5M在电脑上也无法预览,因为Dshow自带的MJPG decoder是无法解码5M及5M以上的分辨率! YUY2格式输出,不存在解码的问题,内存开销也少,处理5M图像一块buffer需要5x2=10M内存。 RGB图像输出一般是由MJPG解码的,RGB图像占用内存也比Yuy2多,一帧需要5x3=15M内存。
hualude_lzx 2013-06-24
  • 打赏
  • 举报
回复
摄像头那边关系不大,我也有这个问题。
一介布衣萧萧 2013-06-24
  • 打赏
  • 举报
回复
引用 1 楼 bbstr 的回复:
用rgb方式预览,拍照用sensor直接输出的jpg模式
能否说说该如何用sensor控制输出jpg ? 摄像头那边要对应进行配置吗? 对这部分不怎么熟悉
zhujinqiang 2013-06-24
  • 打赏
  • 举报
回复
支持楼上高见。
bbstr 2013-06-24
  • 打赏
  • 举报
回复
用rgb方式预览,拍照用sensor直接输出的jpg模式

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧