电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

AndroidCamera框架结构

16页
  • 卖家[上传人]:cl****1
  • 文档编号:467932551
  • 上传时间:2023-02-20
  • 文档格式:DOCX
  • 文档大小:273.63KB
  • / 16 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Android的Camera架构介绍1.1 Camera概述Android的Camera包含取景器(viewfinder)和拍摄照片的功能。目前Android发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。以开源的Android为例,Camera的代码主要在以下的目录中:Camera的JAVA程序的路径:packages/apps/Camera/src/com/android/camera/在其中Camera.java是主要实现的文件frameworks/base/core/java/android/hardware/Camera.java这个类是和JNI中定义的类是一个,有些方法通过JNI的方式调用本地代码得到,有些方法自己实现。Camera的JAVA本地调用部分(JNI):frameworks/base/core/jni/androidhardwareCamera.cpp这部分内容编译成为目标是libandroid_runtime.so。主要的头文件在以下的目录中:frameworks/

      2、base/include/ui/Camera底层库在以下的目录中:frameworks/base/libs/ui/这部分的内容被编译成库libui.so。Camera服务部分:frameworks/base/camera/libcameraservice/这部分内容被编译成库libcameraservice.so。为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用videoforlinux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库libcameraservice.so调用。1.2 Camera的接口与架构Camera的整体框架图Camera的各个库之间的结构可以用下图的表示:在Camera系统的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera类,类libandroid_runtime.so通过调用Camera类提供对JAVA的接口,并且实现了android.hardware.camera类。libcameraservice.so是Camera的服务器程序,它通过继承libui.so的类实现服务

      3、器的功能,并且与libui.so中的另外一部分内容则通过进程间通讯(即Binder机制)的方式进行通讯。libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。Camera部分的头文件在frameworks/base/include/ui/目录中,这个目录是和libmedia.so库源文件的目录frameworks/base/libs/ui/相对应的。Camera主要的头文件有以下几个:ICameraClient.hCamera.hICamera.hICameraService.hCameraHardwareInterface.h在这些头文件Camera.h提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。这样在客户端调用接口,功能则在服务器中实现,但是在客户端中调用就好像直接调用服务器中的功能,进程间通讯的部

      4、分对上层程序不可见。从框架结构上来看,ICameraService.h、ICameraClient.h和ICamera.h三个类定义了camera的接口和架构,ICameraService.cpp和Camera.cpp两个文件用于Camera架构的实现,Camera的具体功能在下层调用硬件相关的接口来实现。AndroidiniIJMiicIkh,3d余创iindfuridtonnJwajtCaiOfuTiICamcraClicritCnmrriiHrdHiArlinlirrfiiCFl AikvHi lirnlHnCaHwraCliL-iil71i_XC iftnicra|gmHCaBciTASGrvace|JCiciClientServer从Camera的整体结构上,类 Camera是整个系统核心,ICamera类提供了 Camera主要功能的接口,在客户端方面调用,CameraService 是Camera服务,它通过调用实际的Camera硬件接口来实现功能。事实上,图中红色虚线框的部分都是Camera程序的框架部分,它主要利用了Android的系统的Binder机制来完成通讯。蓝

      5、色的部分通过调用Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JAVA程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过Android的Bimder来实现进程间的通讯。头文件ICameraClient.hICameraClient.h用于描述一个Camera客户端的接口,定义如下所示:classICameraClient:publicIInterfacepublic:DECLARE_META_INTERFACE(CameraClient);virtualvoidshutterCallback()=0;virtualvoidrawCallback(constsp&picture)=0;virtualvoidjpegCallback(constsp&picture)=0;virtualvoidframeCallback(constsp&frame)=0;virtualvoiderrorCallback(status_terror)=0;virtualvoidautoFocusCallback(boolfocused)

      6、=0;classBnCameraClient:publicBnInterfacepublic:virtualstatus_tonTransact(uint32_tcode,constParcel&data,Parcel*reply,uint32_tflags=0);在定义中,ICameraClient类继承IInterface,并定义了一个Camera客户端的接口,BnCameraClient继承了BnInterface,这是为基于Android的基础类Binder机制实现在进程通讯而构建的。根据BnInterface类模版的定义BnInterface类相当于双继承了BnInterface和ICameraClient。IcameraClient这个类的主要接口是几个回调函数shutterCallback、rawCallback和jpegCallback等,它们在相应动作发生的时候被调用。作为Camera的“客户端”,需要自己实现几个回调函数,让服务器程序去“间接地”调用它们。头文件Camera.hCamera.h是Camera对外的接口头文件,它被实现CameraJNI的文件andro

      7、id_hardware_Camera.cpp所调用。Camera.h最主要是定义了一个Camera类:classCamera:publicBnCameraClient,publicIBinder:DeathRecipientpublic:staticspconnect();Camera();voiddisconnect();status_tgetStatus()returnmStatus;status_tsetPreviewDisplay(constsp&surface);status_tstartPreview();voidstopPreview();status_tautoFocus();status_ttakePicture();status_tsetParameters(constString8¶ms);String8getParameters()const;voidsetShutterCallback(shutter_callbackcb,void*cookie);voidsetRawCallback(frame_callbackcb,void*cookie);voi

      8、dsetJpegCallback(frame_callbackcb,void*cookie);voidsetFrameCallback(frame_callbackcb,void*cookie);voidsetErrorCallback(error_callbackcb,void*cookie);voidsetAutoFocusCallback(autofocus_callbackcb,void*cookie);/ICameraClientinterfacevirtualvoidshutterCallback();virtualvoidrawCallback(constsp&picture);virtualvoidjpegCallback(constsp&picture);virtualvoidframeCallback(constsp&frame);virtualvoiderrorCallback(status_terror);virtualvoidautoFocusCallback(boolfocused);/从接口中可以看出Camera类刚好实现了一个Camera的基本操作,例如

      9、播放(startPreview)、停止(stopPreview)、暂停(takePicture)等。在Camera类中connect()是一个静态函数,它用于得到一个Camera的实例。在这个类中,具有设置回调函数的几个函数:setShutterCallback、setRawCallback和setJpegCallback等,这几个函数是为了提供给上层使用,上层利用这几个设置回调函数,这些回调函数在相应的回调函数中调用,例如使用setShutterCallback设置的回调函数指针被shutterCallback所调用。在定义中,ICameraClient类双继承了IInterface和IBinder:DeathRecipient,并定义了一个Camera客户端的接口,BnCameraClient继承了BnInterface,这是为基于Android的基础类Binder机制实现在进程通讯而构建的。事实上,根据BnInterface类模版的定义BnInterface类相当于双继承了BnInterface和ICameraClient。这是Android一种常用的定义方式。继承了DeathNotifier类之后,这样当这个类作为IBinder使用的时候,当这个Binde

      《AndroidCamera框架结构》由会员cl****1分享,可在线阅读,更多相关《AndroidCamera框架结构》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.