android camera libcamera动态库实现流程总结

android camera libcamera动态库实现流程总结

ID:16293059

大小:17.54 KB

页数:3页

时间:2018-08-09

android camera libcamera动态库实现流程总结_第1页
android camera libcamera动态库实现流程总结_第2页
android camera libcamera动态库实现流程总结_第3页
资源描述:

《android camera libcamera动态库实现流程总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Androidcameralibcamera动态库实现流程总结libcamera.so 流程总结framework/base/include/ui下的CameraHardwareInterface.h定义了libCameraService.so需要的所有接口:getPreviewHeap(),startPreview(preview_callbackcb,void*user),stopPreview(),previewEnabled(),autoFocus(autofocus_callback,void*user),takePicture(sh

2、utter_callback,raw_callback,jpeg_callback,void*user)cancelPicture(boolcancel_shutter,boolcancel_raw,boolcancel_jpeg)setParameters(),getParameters()release(),dump(),openCameraHardware()其中还定义了5个函数指针,分别指向CameraService.cpp中定义的5个callback函数:void(*preview_callback)(constsp

3、&mem,void*user);void(*shutter_callback)(void*user);void(*raw_callback)(constsp&mem,void*user);void(*jpeg_callback)(constsp&mem,void*user);void(*autofocus_callback)(boolfocused,void*user);libCamera.so是对CameraHardwareInterface.h的具体实现。其中S3C6410CameraHWInterfac

4、e.cpp实现了接口中的全部函数。S3C6410Camera.cpp负责与设备通信。被S3C6410CameraHWInterface.cpp调用。libcameraService.so先调用openCameraHardware(),得到Camera实例。然后调用S3C6410CameraHWInterface.cpp中的getParameters(),setParameters()初始化这个Camera实例.S3C6410CameraHWInterface.cpp在setParameters()之后会调用initHeapLocked(),该函

5、数用来分配存放帧数据的堆,并在已分配的堆空间上分配Buffer数组,每个数组变量存储一帧数据。libcameraService.so在Startpreview()中调用getPreviewHeap()得到libcamera.so中存放帧数据的堆的首地址。然后将这个地址注册到SurfaceFlinger的Buffer中以便提高preview的显示效率。CameraService.cpp在调用S3C6410CameraHWInterface.cpp的Startpreview()时会将自己的previewCallback()函数传进去,这样当libc

6、amera.so在调用getPreview()收集到一帧新数据时,就可以通过函数指针调用libcameraService.so中的回调函数previewCallback(),将新收集到的帧数据的首地址传出去。CameraService.cpp接着调用postFrame(),surfcace->postBuffer()等将该地址传到surfaceFlinger中以显示当前的帧数据。S3C6410CameraHWInterface.cpp在startpreview()中新建一个线程previewThread(),在该线程中调用S3C6410Came

7、ra.cpp中的getpreview()将设备收集到的帧数据copy到存放帧数据的堆中。然后在线程中接着调用CameraService.cpp中的回调函数previewCallback(),将当前帧的偏移地址传给surfaceFlinger。以上是camera的preview过程的实现流程。在调用takePicture()之前,cameraService.cpp会先调用autofocus(),同时将自己定义的autofocus函数传进去。cameraService.cpp中的autofocus()会调用S3C6410CameraHWInterf

8、ace.cpp中的autoFocus()函数创建一个线程,在该线程中通过函数指针调用CameraService.cpp中的autoFocuscallb

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。