SDw*_*rfs 6 camera android android-ndk
我写了一个Android应用程序,从相机捕获实时预览.快门时间很短很重要,至少应保持不变.
目前我使用以下代码来实现低快门时间:
Parameters params = camera.getParameters();
params.setSceneMode(Parameters.SCENE_MODE_SPORTS);
params.setWhiteBalance(Parameters.WHITE_BALANCE_DAYLIGHT);
params.setFlashMode(Parameters.FLASH_MODE_OFF);
params.setFocusMode(Parameters.FOCUS_MODE_INFINITY);
params.setPreviewFpsRange(9000, 29453);
params.setPreviewFrameRate(29453);
params.setJpegQuality(100);
params.setPreviewFormat(ImageFormat.NV21);
params.setPreviewSize(1280,720);
params.setAntibanding(Parameters.ANTIBANDING_OFF);
params.setExposureCompensation(params.getMinExposureCompensation());
params.set("iso", 1250);
camera.setParameters(params);
Run Code Online (Sandbox Code Playgroud)
我的手机固件似乎不支持setSceneMode()(getSupportedSceneModes返回一个空列表)."ISO" - 设置可能没有效果(没有查看图片,只是计算了帧速率).刚刚在某个地方找到了这个代码并使用它......也许它只是错误的字符串?
到目前为止发生的情况是:帧速率在9到29,453 fps之间变化,这是唯一支持的帧速率范围.所以params.setPreviewFpsRange(29453, 29453);也不起作用.在良好的光线条件下(正常的一天,在室内,指向窗户),帧率很高(20-30 fps),对于中/低光(日光,室内,直接远离窗户),帧率变得非常低(8-10 fps)条件.
更详细:我不需要高帧速率,但需要低快门时间.收集的数据应用于室内导航(或第一步的室内定位).该应用程序需要在一个人正常行走时拍照,而不需要关心他/她如何携带电话.这个人甚至可以跑步或"摇摆"手机(因为你走路时通常会移动手臂).因此,快门时间太长,通常会出现很多"运动模糊".情况与"我想拍照"情况大不相同,照片试图保持相机稳定.我们实际上不想获得"好照片",但想要以某种方式不时检测到一些墙壁边缘.我期待图片中有很多"噪音",但无论如何这有希望......
想法是,有可能使用NDK更好地控制相机参数.有没有人有NDK的经验,可以回答我天气值得尝试?
附加信息:我正在使用HTC Desire Z(也称为"T-Mobile G2"或"HTC Vision")作为测试设备.
最简洁的答案是不".更长的答案从一个问题开始:你的应用程序不关心捕获,但只使用YUV预览帧,这是正确的吗?
作为没有root访问权限的标准下载应用程序,您无权直接访问相机(或其他)设备.您只有setParameters() API来影响相机行为,因此您完全受制于OEM通过此API公开的相机功能.
即使在root设备上,您的功能也是有限的,但现在可以通过设备驱动程序和特定摄像头ISP的规格来实现.
在这两种情况下,您都应该从非常谨慎地选择目标设备开始.我相信有些Android手机比HTC Vision更能控制相机.例如,Samsung S2 http://pfittech.com/rom_pfittech_jb.html的修改版本在1080p时拥有稳定的25 FPS.
| 归档时间: |
|
| 查看次数: |
2113 次 |
| 最近记录: |