全志平台,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