文档详情

Android Camera HAL3 分析.doc

发布:2017-02-01约3.94万字共27页下载文档
文本预览下载声明
Android Camera HAL3 分析 本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。 qq:1037701636 email:gzzaigcn2009@163.com Software:系统源码Android5.1 ? Camera3研读前沿: Camera1.0相关的内容时,主要围绕着CameraClient、CameraHardwareInterface等方面进行工作的开展,无论是数据流还是控制流看起来都很简单、明了,一系列的流程化操作使得整个框架学起来特别的容易。因为没有Camera2.0相关的基础,所以这次直接看3.0相关的源码时,显得十分的吃紧,再加上底层高通HAL3.0实现的过程也是相当的复杂,都给整个研读过程带来了很多的困难。可以说,自身目前对Camera3.0框架的熟悉度也大概只有70%左右,希望通过总结来进一步梳理他的工作原理与整个框架,并进一步熟悉与加深理解。 ? 1.Camera3。 CameraService建立起一个可用操作底层Camera device大致需要经过Camera2Client、Camera3Device以及HAL层的camera3_device_t三个部分。 Camera3架构看上去明显比camera1来的复杂,但他更加的模块化。对比起Android4.2.2 Camer系统架构图(HAL和回调处理)一文中描述的单顺序执行流程,Camera3将更多的工作集中在了Framework去完成,将更多的控制权掌握在自己的手里,从而与HAL的交互的数据信息更少,也进一步减轻了一些在旧版本中HAL层所需要做的事情。 ? 2. Camera2Client程 Camera2Client后会进行initialize操作,完成各个处理模块的创建: ? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ???.... mStreamingProcessor = new StreamingProcessor(this);//preview和recorder ????threadName = String8::format(C2-%d-StreamProc, ????????????mCameraId); ????mStreamingProcessor-run(threadName.string());//预览与录像 ? ????mFrameProcessor = new FrameProcessor(mDevice, this);// 3A ????threadName = String8::format(C2-%d-FrameProc, ????????????mCameraId); ????mFrameProcessor-run(threadName.string()); //3A ? ????mCaptureSequencer = new CaptureSequencer(this); ????threadName = String8::format(C2-%d-CaptureSeq, ????????????mCameraId); ????mCaptureSequencer-run(threadName.string());//录像,拍照 ? ????mJpegProcessor = new JpegProcessor(this, mCaptureSequencer); ????threadName = String8::format(C2-%d-JpegProc, ????????????mCameraId); ????mJpegProcessor-run(threadName.string()); .... ?mCallbackProcessor = new CallbackProcessor(this);//回调处理 ????threadName = String8::format(C2-%d-CallbkProc, ????????????mCameraId); ????mCallbackProcessor-run(threadName.string()); 依次分别创建了: ? StreamingProcessorthread,该模块主要负责处理previews与record两种视频流的处理,用于从hal层获取原始的视频数据 FrameProcessorthread,该模块专门用于处理回调回来的每一帧的3A等信息,即每一帧视频除去原始视频数据外,还应该有其他附加的数据信息,如3A值。 CaptureSequencerthread,该模块需要和其他模块配合使用,主要用于向APP层告知c
显示全部
相似文档