walle和普通camera的流程总结

walle的启动流程:

系统开机启动,在init.rc中启动可执行程序mediaserver。他通过一系列的调用,调用到cameraserveronFirstRef函数。mWalleHardware->initWalle进而调用HAL层的HAL_camera_device_open函数。则启动previewthread线程。进而开始运行walle算法。预览是不运行的,也就是windowbuf不需要设置。

 

注意mWalleHardware->initWalle与普通的初始化的区别就是没有设置显示的windowbuf

第三方APK启动流程:

Apk启动,apk初始化经过一系列的调用,调用到cameraserverconnect函数。这里只是打开预览要使用的windowbuf。同时new Client这样上层的apk就可以与HAL通讯,将预览数据显示到屏幕上。只是设置了windowbuf

Apk会调用startpreview函数,进而调用cameraserverstartpreview,进而调用Halsetwindowsstartpreview。则显示预览到window上。

拍照,apk会发送onShutterButtonClick: mCameraState=1,进而CameraService( 1129): takePicture函数,进而调用HALmHardware->takePictureHALstoppreview和启动拍照线程。

Stoppreview中会停止预览线程的显示,

拍照线程中会自己从v4l2中读取到frame的数据并处理(大小,格式),保存为图片。

拍照完成后,就会继续stoppreviewstartpreview开启prethread,进行预览显示。

1V/camera  ( 1810): onShutterButtonClick: mCameraState=1

1.1V/CameraService( 1130): setParameters(0)

1.2V/CameraService( 1130): enableMsgType(0)

1.3V/CameraService( 1130): takePicture(0)

2V/camera  ( 1810): mShutterLag = 323ms

3V/camera  ( 1810): mShutterToRawCallbackTime = 70ms

4V/camera  ( 1810): mPictureDisplayedToJpegCallbackTime = 44ms

5V/camera  ( 1810): stopPreview

6V/camera  ( 1810): stopPreview

7V/camera  ( 1810): Set picture size.640x480

8V/camera  ( 1810): Preview size is 640x480

9V/camera  ( 1810): startPreview

录像流程:

1.V/camera  ( 1814): stopPreview

2.V/videocamera( 1814): startVideoRecording

3 V/videocamera( 1814): initializeRecorder

4V/CameraService( 1130): startRecording(0)

 

停止录像:

1E/videocamera( 1814): onShutterButtonClick, call stopVideoRecording()

E/videocamera( 1814): onStopVideoRecording, call stopVideoRecording()

V/videocamera( 1814): stopVideoRecording

 

2V/videocamera( 1814): Setting current video filename: /mnt/sdcard/DCIM/Camera/VID_19700102_080126.mp4

退出流程:可以只是在apk上调用stoppreview,也可以在apk在调用release函数,而这个函数会导致HALstoppreviewrelease函数被调用。

1E/videocamera( 1814): finishRecorderAndCloseCamera,case not mMediaRecorderRecording,call stopVideoRecording()

V/videocamera( 1814): stopVideoRecording

V/videocamera( 1814): Releasing media recorder.

V/videocamera( 1814): closeCamera

2V/CameraService( 1130): stopPreview(0)

3V/CameraService( 1130): stopPreview(0)

4V/CameraService( 1130): release(0)这里面要释放buffer和关闭算法,关闭v4l2

Apkstoppreview只有执行mHardware->stopPreview();函数。

ApkReleasecloseCamera)包括mHardware->stopPreview();mHardware->release();

Walle720P640x480的转换问题

现在的驱动(不一定是驱动的问题)和HAL的配合,会导致,反复切换两者时会导致camera崩溃。无法继续使用,只能重启机器。

 驱动中有一个同步有一定的几率会同步上,所以出问题。

你可能感兴趣的:(walle和普通camera的流程总结)