QualcommCameraHardware来源的想法native_get_picture:MSM_CAM_IOCTL_GET_PICTURE连接超时错误?

我正在开发一个库,使开发人员更容易使用Camera API。

在纵向模式下使用后置摄像头的Droid Incredible 2无法拍摄照片。 具体来说,我在LogCat中得到这个序列:

 08-18 09:25:52.094: E/QualcommCameraHardware(1368): native_get_picture: MSM_CAM_IOCTL_GET_PICTURE fd 25 error Connection timed out 08-18 09:25:52.094: E/QualcommCameraHardware(1368): getPicture failed! 08-18 09:25:52.094: E/QualcommCameraHardware(1368): get picture failed, giving jpeg callback with NULL data 

这些消息在我调用Camera上的takePicture()之后约5秒钟发生,这符合我看到的QualcommCameraHardware一些老的源代码,该代码在ioctl()调用上设置5000ms的超时以与相机硬件对话。

最终的结果是, onPictureTaken()传递了JPEG数据的null byte[] ,这意味着我们没有照片。

该设备在所有其他testingconfiguration中都可以使用我的代码,包括使用前置摄像头在纵向模式下工作。

有谁知道一些具体的事情可能会导致这种特殊的失败?

UPDATE

我不能再重现错误。 我会删除这个问题,但是一旦有答案,这显然是不可能的。

MSM_CAM_IOCTL_GET_PICTURE是运行该函数的内核调用

 static int msm_get_pic(struct msm_sync *sync, void __user *arg) 

我从HTCdev下载了您的设备的内核源代码,并find了在中定义的函数

 drivers/media/video/msm/msm_camera-7x30.c 

拍照时可以检查内核消息是什么?

 adb shell su -c "dmesg" 

最有可能的是作为媒体处理一部分的cameraService已经在后台崩溃了。 如果你只是试图在Android中运行默认的相机应用程序,它不显示,然后只需重新启动设备来解决这个错误。

我认为你正在重新使用raw和jpegcallback图片callback。 所以如果它被称为原始callback,数据可能是空的。 由于文件说,

触发asynchronous图像捕获。 随着图像捕捉的进行,相机服务将启动一系列callback应用程序。 拍摄图像后会发生快门callback。 这可以用来触发声音,让用户知道图像已被捕获。 原始callback在原始图像数据可用时发生(注意:如果没有可用的原始图像callback缓冲区或原始图像callback缓冲区不足以容纳原始图像,数据将为空)。 postviewcallback发生在一个缩放的,完全处理的postview图像可用(注意:并非所有的硬件都支持这个)。 当压缩图像可用时,发生jpegcallback。 如果应用程序不需要特定的callback,则可以传递null而不是callback方法。