问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 开发,使用ndk调用v4l2来读取Android摄像头的数据靠谱吗_百度知 ...

发布网友 发布时间:2022-05-04 23:31

我来回答

1个回答

热心网友 时间:2022-04-14 21:56

  一、用NDK进行C代码的调取(已熟悉此调取技术)
  二、摄像头的获取,这个不能用SDK来调,因为用SDK来调头部跟踪程序很难获得我们的
  数据,也不大能考虑AIDL跨进程通信的方案,因为这样数据交互可能太慢。

  问题:

  头部跟踪移植到Android系统中,跟踪程序需通过核心程序(C实现)调取Camera而不是通过Android SDK进行调取Camera。

  前提:

  Android的四个层次如下,

  一个完成的Android应用,一般都是有Java框架的,虽然NDK(Native Development Kit,一系列工具的集合)提供了一系列的工具,帮助开发者快速开发 C (或 C++ )的动态库,并能自动将 so 和 java 应用一起打包成 apk 。但是NDK 并没有提供各种系统事件处理支持,也没有提供应用程序生命周期维护。此外,在本次发布的 NDK 中,应用程序 UI 方面的 API 也没有提供。至少目前来说,使用纯 C 、 C++ 开发一个完整应用的条件还不完备。所以,就目前来说,必须依赖上层Java框架的支持。

  解决方案:

  初步考虑有三种方式可以实现:

  一、由于Android是运行在Linux上的,所以可以考虑让C程序调V4L2
  接口来获取摄像头数据。Video4linux2(简称V4L2),是linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。,不过可移植性差,因为不同厂家的设备驱动接口可能不完全一样,另外也要求开发者熟悉Linux内核编译。

  二、SDK获取摄像头数据,再用JNI调C来处理图像,也就是使用JNI来调取跟踪程序并进行数据交互。

  三、通过查看Android系统的底层代码,发现Android系统调摄像头也是通过JNI编程来实现的,所以考虑到是否能在JNI调用的Android底层Camera的底层流程中增加一步添加自己的业务逻辑。具体表现在调取Camera之前先启动头像识别程序,让头像识别程序去调Camera设备并获得进行数据交互,比如可以考虑在人像识别中调取android_hardware_Camera.cpp。Camera进程机制如下图:

  在Android中,Camera的代码主要在以下的目录中:
  Camera的JAVA程序的路径:packages/apps/Camera/src/com/android/camera/
  在其中Camera.java是主要实现的文件
  Camera的JAVA本地调用部分(JNI):
  frameworks/base/core/jni/android_hardware_Camera.cpp

  这部分内容编译成为目标是libandroid_runtime.so

  。
  Camera底层库在以下的目录中:
  frameworks/base/libs/ui/
  这部分的内容被编译成库libui.so。

  Camera服务部分:
  frameworks/base/camera/libcameraservice/
  这部分内容被编译成库libcameraservice.so。

  为了实现一个具体功能的Camera,在最底层还需要一个硬件相关的Camer库(例如通过调用video for linux驱动程序和Jpeg编码程序实现)。这个库将被Camera的服务库libcameraservice.so调用。

  在 Camera系统的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera类,类 libandroid_runtime.so通过调用Camera类提供对JAVA的接口,并且实现了android.hardware.camera 类。 libcameraservice.so是Camera的服务器程序,它通过继承libui.so的类实现服务器的功能,并且与libui.so中的另外一部分内容则通过进程间通讯(即Binder机制)的方式进行通讯。
  libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。

  特别说明:Camera在模拟器上无法运行,以上所述方案暂时不能做测试,而且底层调取Camera属于系统开发和嵌入开发的范畴,需要的知识面比较广,我也只是在初步研究中,以上所述,如有错误,还请批评指正及包涵。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
沙尘暴属于自然灾害吗 星配什么字好听男孩 女孩带星字叫什么名字好听又洋气 带星字优美人名 星字如何取名 带星字的名活泼的 非常潮流的星字名 成华区社保局地址 有什么平价又好用的防晒霜值得安利? 有哪些性价比比较高的物理防晒霜可以安利? 广场舞有一首歌雅拉为---呀拉为是什么歌 一首藏语广场舞歌曲.男女合唱.一开始好像是杀杂西啦后头是呀拉什么的 梦中的额吉广场舞用的是哪个音乐 课程的分类主要有哪几种 360全民医保,第一月扣1元,这个月扣129元,是什么意思? 金属表面处理到底是什么?如题,还有属于什么行业 为了防止生锈和美观,金属表面处理工艺有哪些 简述金属材料表面处理常见的方法 360极速浏览器怎么由个人版切换到正式版 刚配过种的母猪不爱吃食什么原因 母猪产后不食危害很大,母猪产后不食的原因是什么? 无锡十大品牌装饰公司有哪些 无锡装修公司排名(前十)都有哪些公司 全民k歌录不进去声音怎么回事?耳机可以正常使用,权限也给了。游戏和qq语音都能用。就是全民k歌不能 我家的猪配种有43天不吃食这是什么情况? 紫苹果装饰怎么样 母猪不吃食是什么病 无锡装修公司排名哪家好 武冈名匠装饰公司 母猪产后不吃食,这是什么原因造成的? v4l2编程 关于linux中无驱动摄像头无法驱动问题 会的话麻烦你看一下... dm3730摄像头驱动的问题,使用V4L2框架阻塞,不使用图像又不正确。_百... usb摄像头struct v4l2_capability 中的capabilities参数结果是0x4000001代表了什么 中考语文冲刺课程八讲 阎王不高兴漫画是在哪一话有李将军 阎王不高兴阎小罗和哪吒同人文 DT862-4型三相四线有功电表,型号为3*10(40)A,100r/kw·h,3×220/380V 我想知道我家电表DT862-4型每走一字是多少度? DT862-4型三相四线有功电表读数。没有互感器的,倍数是多少? 三相电能表DT862-4电表在不带负载的情况下为什么自转 女性人体常识问题 型号: DT862-4型 三相四线有功电能表 3*220/380V 3*1.5(6)A 50HZ 600r/kwh 它的倍数 新购的电视机出现质量问题,有没有中立机构能够出具鉴定? 自己家的电视机坏了要找什么样的检测机构 三相四线有功电度表DT862-43X1.5(6)A互感器PRIMARG400A 5/3.75VA怎么读 为什么海信电视质量和售后这么差,还可以在中国为所欲为,那么猖狂!欺诈老百姓,有没有相关部门进行调查 哪间机构能做电视机国内节能认证? 鉴定电视机屏内碎是否人为要多少钱 海信电视屏幕自裂,售后只看了图片说是人为损坏不保修,怎么请第三方签定 有权威机构对液晶电视屏的分辨率及是不是全高清屏进行检测与鉴定吗