Android Camera Preview图解

  次阅读 作者:智能小宝 来源:互联网 2015-09-29 10:08 我要评论(0)

Android Camera小系统:

嗯直接看Camera HAL层,它实现是主要的工作, 它一般通过ioctl调用V4L2 command ①从linux kernel中的camera driver①得 到preview数据. 然后交给surface(或overlay)显示或者保存为文件.在HAL层需要打开对应的设备文件,并通过ioctrl访问camera driver. Android通过这个HAL层来保证底层硬件(驱动)改变,只需修改对应的HAL层代码,FrameWork层与JAVA Ap的都不用改变.

注释:①V4L2(video 4 linux 2)

备 注:①这个驱动并不是camera本身而是控制camera的主设备,这个camera控制器在linux里被抽象成为v4l2层通用,最后由 (*attach)连接到具体每个不同的camera设备驱动里。camera=camera控制器+外接的camera sensor,控制器集成在cpu里,linux下的设备结点就是/dev/video0.

preview数据的显示过程:

Java app 呼叫 ② Jni ,Jni调用各种.so :

libandroid_runtime.so ---> libcamera_client.so ---> Binder IPC---> libcameraservice.so ---> libcamera.so

注释:②请原谅我用【呼叫】这个动词,实在想不出更加形象的词汇了。

1.打开linux kernel中的camera driver的设备文件,调用CameraHardwareInterface.h 中定义的openCameraHardware(),打开camera driver的设备文件(例如/dev/video0).

2.CameraHardwareInterface.h 中定义的 setParameters()函数,传参告诉camera HAL使用哪一个硬件摄像头,以及它工作的参数(size, format等等),并在HAL层分配存储preview数据的buffers(如果buffers是在linux kernel中的camera driver中分配的,并拿到这些buffers mmap后的地址指针).

3.如果不使用overlay那设置显示目标就在libcameraservice.so 中,不会进Camera HAL动态库.并将上一步拿到的preview数据buffers地址注册到surface中. 如果使用overlay那在libcameraservice.so 中会通过传进来的Isurface创建Overlay类的实例,然后调用CameraHardwareInterface.h 中定义的 setOverlay()设置到Camera HAL动态库中.

4.开始preview,调用到CameraHardwareInterface.h 中定义的 startPreview()函数.startPreviewMode会处理preview的显示介质,如果使用Overlay显示,会设置相应的Overlay,同时调用mHardware->startPreview()以启动preview;否则先调用mHardware->startPreview()启动preview,然后设置buffer:调用函数registerPreviewBuffers(),它会调用mHardware->getPreviewHeap(),从HAL层获得preview的buffer,将其设置给Surface去显示preview的结果。

Preview数据可以通过Overlay和Surface两种介质去显示

1.使用Overlay显示

overlay 一般用在 camera preview, 视频播放等需要高帧率的地方, 还有可能 UI 界面设计的需求,如 map 地图查看软件需两层显示信息. overlay需要硬件与驱动的支持.Overlay 没有 java 层的 code, 也就没有 JNI 调用. 一般都在 native 中使用.

如果要使用Overlay,底层硬件必须支持Overlay。在CameraService::Client的构造函数中,有相应的判断。

CameraService::Client::Client(const sp<CameraService>& cameraService,const sp<ICameraClient>& cameraClient, pid_t clientPid){}

若mUseOverlay = mHardware->useOverlay();返回值为true,则表示硬件支持Overlay;否则只能使用Surface显示。

Android系统中提供了Overlay的接口,其具体实现需要自己做.

关于多层 overlay:例如需要同时支持 overlay1 与 overlay2.需在overlay hal 的 overlay_control_device_t 中要添加 overlay1 与 overlay2i葾C结点就是l I悫erlay2.衋y1 与 得菴t-indentl I鉮呓猫'ierla鱯.bcs涡vatey类祎eygoes below ab.c */敝С overlay1 与 overlay2.需在overlay hal 的 overlay_control_device_t 中要t*ce_t 中要明

temrel="nitag"listl"> aiv> tag-0"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=。在Ca
tag-1"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=fer:调
tag-2"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中国人工智
槭-中国人工智span aiv> tag-3"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中箃ext
槭-中箃extspan aiv> tag-4"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中国萪k
槭-中国萪kspan aiv> tag-5"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中筰d=ni
tag-6"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中国id Camera
槭-中国id Camera scri aiv> tag-7"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中古
槭-中古畇cri aiv> tag-8"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中国萪kd开反
槭-中国萪kd开穝cri aiv> tag-9"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中国6.0
槭-中国6.0span aiv> tag-10"ef="http://wwwso
se href="?s=40303207690317848&ie3C//&layry=1&q=槭-中国人工智能网-P
槭-中国人工智能网-span 乙缆 09-29 1 10:08 paget>&nbv> 'a1'>共4页: span> clas1an clas悄苄”<'typephp?#cm" _2/bbs.'>2span>能小宝<'typephp?#cm" _3/bbs.'>3span>能小宝<'typephp?#cm" _4/bbs.'>4span>能小宝<'typephp?#cm" _2/bbs.'bv> 'a1'>下一title="9-29 class="avaclearfix tl="new蕁的 pe="textli>came篇:>能小宝<'ipt" src=typephp?#cm"4/bbs.'>.睸hutter Soundienn't resto.c to鷌dfaultspan ome"="textli>下一篇:>能小宝<'ipt" src=typephp?#cm"6/bbs.'>:2em;">巧柚孟允灸鬽Us自Over照相span ome"="text cla angyan_count
  • tag"listl">
    taglass="l/span> ext/javascritags /孟允灸/
  • 2015-09-29 1 10:08 svlass="l/span> stvi本站文章dent"/pl于et="e(),网友ttp:,本站只负责对文章进行整理、排版、编辑,是出于传递ook"dent之目的,愦意味着赞2emtp:/或证实其内容的真实性。设计您有什么意见或建议,请联系QQ28-1688-302!img3">2015-!-- @声明 --> /span> 2015-!-- JiaThis Button BEGIN --> stslisl="njiathis_itle=_32x32"listl"> aiv> jiathis_button_weix户来源:互联网="changyvar jiathis_config = {="changy raab.cu> :{"changy "tsina<:"28654eph72""changy }, ontent font appkey:{"tsina<:"2586190969"}t font } ">2015-0
    会员中心
  • 繿 <
  • com-lass="l/ clas pt> > me"="tex pt> > ext/javascriarget=_blantyp610248pep8/bbs.aiv> tass="
    bbs.ailab.cn/api61024/10f="3C53id=custot/tou未来两年gao.php"要怎么走?看这篇就够了" heUCS"="115="n1" tar175 (/javascri){"changdocum"/c.write(unescapt('%3C);"changbdcs.>会 = ' rel="nofollow">;"changbdcs.async = ce&g;ass="gbdcs. = ))[0];s.pClintNp><.insertBefore(bdcs, s);"chan})(); 2015-0
    ad < > 2015- 莝pan> !--g>
    :调point hotdiv 2"> /
    com-lass="l/ clas 预见AI的未来:今天的平台本身明日的生id="home" h
    ml1-超级 机全球最快,多领域屡立奇id="home" h
    的未来发展:自主研发和AI将

  • ml1-首枚大型运载火箭长征五号成功发射id="home" h="text cla ang莝pan>
    floatfix >/span> !--id C推荐-->
    rebd"> / com-lass="l/ clas 詃 C推荐an clas莝pan> a rebdbox< rebdlass="listl"> /javascriarget=_blantyp610248pep8/bbs.ai/a>
    >/span> < rebd < >pt> > /javascriarget=_blantyp610248pep8/bbs.ai/a>
    bbs.ailab.cn/api61024/10f="3C53id=custot/tou未来两年gao.php"要怎么走?看这篇就够了" heUCS"="59oun1" tar90 >pt> > cript> >/span>

    据国外://w报道,在过去两年内,聊天籹tron(a "td/")、gao.php"以及籹tr学习的研发和采用取得了巨大进展。许多初创公司正利用萢o.php"和...img3">201f="#" cla rebdbox< rebdlass="listl"> /javascriarget

    >/span> < rebd < >pt> > /javascriarget
    bbs.ailab.cn/api6102f/095U12I1id=custot/tou霍金:gao.php" 亲蠲烂畹氖拢 亲钤愀獾氖" heUCS"="59oun1" tar90 >pt> > cript> >/span>

    霍金 视觉ml1- 图 英国著名物理学家霍金(Stephen Hawking)再次就gao.php"(AI)发声,他认为:对于on类来说,强大AI的出现允< 亲蠲烂畹...img3">201f="#" cla rebdbox< rebdlass="listl"> /javascriarget=_blantyp6110381664/bbs.aila>

    预见AI的未来:今天的平台本身明日的生id="pt> >/span> < rebd < >pt> > /javascriarget=_blantyp6110381664/bbs.aila>
    ext bbs.ailab.cn/api61103/215959DDid=custot/tou预见AI的未来:今天的平台本身明日的生态" heUCS"="59oun1" tar90 >pt> > cript> >/span>

    文|郑娟娟 今年,gao.php"(AI) 60岁ibca在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...img3">201f="#" cla rebdbox< rebdlass="listl"> /javascriarget=_blantyp610 981453/bbs.aila>

    对话谷歌资深研究科学家:gao.php"buffscript> >/span> < rebd < >pt> > /javascriarget=_blantyp610 981453/bbs.aila>
    ext bbs.ailab.cn/api61019/135P02394id=custot/tou对话谷歌资深研究科学家:gao.php"buff一家独大" heUCS"="59oun1" tar90 >pt> > cript> >/span>

    AlphaGo与李世石的&nbs大战,为大众迅速普及了gao.php"的概念。 但对谷歌而言,除了下围棋,现在的&no.php"进展到open步了?未来,gao.php"...img3">201f="#" cl -09-29 1 !--本周热点--> :调point hotdiv 2"> / com-lass="l/ clas 本周热点an clas莝pan> acla angy

    AI界期末考试出ew;:预测大选美1-输给id="home" h
    吴恩达深度解读AI:并非万能 ://w过分id="home" h
    猎户座飞船载人舱第五次回收测试成功进id="home" h
    特朗普上台后将用这5种方式. 然美1-籹id="home" h="text cla 1 09-29 1 !--编辑推荐--> :调point hotdiv 2"> / com-lass="l/ clas 编辑推荐an clas莝pan> acla angy
    预见AI的未来:今天的平台本身明日的生id="home" h
    对话谷歌资深研究科学家:gao.php"buffscrihome" h
    :调point hotdiv 2"> / com-lass="l/ clas 莝pan> !--右侧eraS顶部、二维码--> logout" titletatic/ i> gotop