其他分享
首页 > 其他分享> > 全志平台,camera app适配。

全志平台,camera app适配。

作者:互联网

T2/T7平台,全志camera的适配,还是简单记录一下吧。

一,代码log分析:

首先代码在android/device/softwinner/wing-common/hardware/camera目录下。

除了代码以外,还有一个camera.cfg文件需要注意。

从一般的出错log来看,主要为以下两种。

一。ERROR opening /dev/video0

E/V4L2CameraDevice( 1094): ERROR opening /dev/video0: No such file or directory
E/HALCameraFactory( 1094): cameraDeviceOpen: Unable to connect camera
E/CameraClient( 1094): Could not open camera 1: -22
E/CameraClient( 1094): initialize: Camera 1: unable to initialize device: Invalid argument (-22)
I/CameraClient( 1094): Destroying camera 1
W/AudioFlinger( 1094): write blocked for 363 msecs, 1 delayed writes, thread 0xb522b008
W/AudioFlinger( 1094): session id 7 not found for pid 3195
W/AudioFlinger( 1094): session id 8 not found for pid 3195
W/CameraBase( 3195): An error occurred while connecting to camera: 1
D/AndroidRuntime( 3195): Shutting down VM
W/dalvikvm( 3195): threadid=1: thread exiting with uncaught exception (group=0x415eab90)
E/AndroidRuntime( 3195): FATAL EXCEPTION: main
E/AndroidRuntime( 3195): Process: com.example.cameraapplication, PID: 3195
E/AndroidRuntime( 3195): java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime( 3195):        at android.hardware.Camera.native_setup(Native Method)
E/AndroidRuntime( 3195):        at android.hardware.Camera.<init>(Camera.java:350)
E/AndroidRuntime( 3195):        at android.hardware.Camera.open(Camera.java:309)

二。 VIDIOC_S_FMT Failed

I/CameraClient( 1099): Opening camera 1
D/HALCameraFactory( 1099): Calling process is: com.example.cameraapplication
D/CameraHardware( 1099): ........................... to do initDefaultParameters
D/CameraHardware( 1099): setVideoCaptureSize next version to do ......
D/CameraHardware( 1099): Starting camera: 640x480 -> NV12(yuv420sp)
D/V4L2CameraDevice( 1099): startDevice, wxh: 640x480, fmt: 842094158
E/V4L2CameraDevice( 1099): VIDIOC_S_FMT Failed: Invalid argument
D/V4L2CameraDevice( 1099): ion_alloc_close ok
D/CallbackNotifier( 1099): savePictureThread exitI/CameraClient( 1099): Destroying camera 1
D/AndroidRuntime( 3805): Shutting down VM
W/dalvikvm( 3805): threadid=1: thread exiting with uncaught exception (group=0x41d4ab90)
E/AndroidRuntime( 3805): FATAL EXCEPTION: main
E/AndroidRuntime( 3805): Process: com.example.cameraapplication, PID: 3805
E/AndroidRuntime( 3805): java.lang.RuntimeException: startPreview failed
E/AndroidRuntime( 3805):        at android.hardware.Camera.startPreview(Native Method)
E/AndroidRuntime( 3805):        at com.example.cameraapplication.CameraUtils.startPreviewDisplay(Cam)

问题比较简单,一个是没有设备节点,这个是注册的时候设备号是从video1(全志为啥这样做啊)开始的。

一个是VIDIOC_S_FMT的时候失败了,从底层来看,就是上层设置的分辨率,格式,底层不支持(底层是720*480的分辨率)。

正常的操作是先VIDIOC_TRY_FMT 查询有几种格式,然后设置,最后还需要VIDIOC_G_FMT看是否生效。而全志是VIDIOC_S_FMT就把尺寸传下去,支持就支持,不支持的话,底层直接修改上层传下去的尺寸,上层通过这个修改后的尺寸,继续配置后面的一系列crop等操作。

继续向前追溯,发现最初是camera.cfg配置有误导致的。稍微修改一下。

;------------------------------------------------------------------------------- 
; driver device name
;------------------------------------------------------------------------------- 
camera_device = /dev/video1

;------------------------------------------------------------------------------- 
; device id 
; for two camera devices with one CSI
;------------------------------------------------------------------------------- 
device_id = 0

fast_picture_mode = 0

used_preview_size = 1
key_support_preview_size = 720x480
key_default_preview_size = 720x480

used_picture_size = 1
key_support_picture_size = 720x480,640x480
key_default_picture_size = 720x480
 

三。新的错误  预览蓝屏。

初步看log,没有发现什么问题。dump图片来看,感觉是特意填充成蓝色的。有两种猜测。

1,底层驱动只传来了前几张图片,而这几张图片是蓝色的。

2,底层驱动异常,只传了蓝色的图片上来。

先查看底层驱动问题。恩,对比正常倒车与android模式。发现tvd摄像头分为4个channel,也就是说可以四路显示。

那么对于接入了摄像头的channel,应该是正常显示画面。对于没有接入摄像头的channel,应该是显示蓝屏。

所以,这个问题,是channel设置有误导致的。坑爹的是,这些channel的设置啊什么的,是全志独有的,reserved位操作的。坑。

替换了channel之后,发现还是没有预览。测量了一下摄像头电压。发现只有摄像头的电压受到倒车线的控制。将TVD电源线重新接到12V电源上,问题解决。


 

标签:1094,3805,适配,app,1099,3195,camera,AndroidRuntime
来源: https://blog.csdn.net/ShuChengsong/article/details/98618017