Android Camera HAL3中拍照Capture模式下多模块间的交互与帧Result与帧数据回调.doc

Android Camera HAL3中拍照Capture模式下多模块间的交互与帧Result与帧数据回调.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android Camera HAL3中拍照Capture模式下多模块间的交互与帧Result与帧数据回调.doc

Android Camera HAL3中拍照Capture模式下多模块间的交互与帧Result与帧数据回调。 qq:1037701636 email:gzzaigcn2009@163.com Software:系统源码Android5.1 前沿: ? ? Camera3 HAL3架构下完全不同于HAL1的preview预览处理过程,包括主要涉及到的控制流和视频流等。比较详细的阐述了Camera2Client下streamProcessor、CallbackProcessor、CaptureSequencer等模块在Camera3架构下的功能。分析得出每个模块下均会在Camera3Device下以一个Stream的形式存在,而每个stream又是由多个buffer来构成主体的。与HAL3进行数据的交互时,以Request和result来作为数据传输的载体。在这些基础上本文将描述具体拍照Capture模式下的数据流和控制流,主要会涉及到jpegprocessor、CaptureSequencer这几个模块的工作原理。鉴于Capture模式下的数据流更复杂,在这里重点会分析数据流result回传时,每个模块的响应以及处理过程,填补前一博文的空白。 1. HAL3Camera2Client下的take picture的入口函数 capture picture功能的入口,主要完成了以下两件事情: updateProcessorStream(mJpegProcessor, l.mParameters); mCaptureSequencer-startCapture(msgType) ? ? JpegProcessor模块而言,他的stream流第一次是在preview阶段进行了create与初始化,这里之所以再次调用JpegProcessor::updateStream目的是参考原先JpegProcessor?stream的width与height是否变化即是否照片要求的分辨率发生了变化,如果是的话就需要delete原先的stream,重新建立一个stream。 ? ? JpegProcessor中重点关注CpuConsumer与Surface的生产者与消费者处理模式,官方称之为Create CPU buffer queue endpoint。 2.?CaptureSequencer块 ? ? CaptureSequencertake picture下操作的重点,在Camera2Client中进行了创建,首先来看CaptureSequencer线程的threadLoop函数: [cpp]?view plaincopy bool?CaptureSequencer::threadLoop()?{?? ?? ????spCamera2Client?client?=?mCmote();?? ????if?(client?==?0)?return?false;?? ?? ????CaptureState?currentState;?? ????{?? ????????Mutex::Autolock?l(mStateMutex);?? ????????currentState?=?mCaptureState;?? ????}?? ?? ????currentState?=?(this-*kStateManagers[currentState])(client);?? ?? ????Mutex::Autolock?l(mStateMutex);?? ????if?(currentState?!=?mCaptureState)?{?? ????????if?(mCaptureState?!=?IDLE)?{?? ????????????ATRACE_ASYNC_END(kStateNames[mCaptureState],?mStateTransitionCount);?? ????????}?? ????????mCaptureState?=?currentState;//保留新的状态?? ????????mStateTransitionCount++;?? ????????if?(mCaptureState?!=?IDLE)?{?? ????????????ATRACE_ASYNC_BEGIN(kStateNames[mCaptureState],?mStateTransitionCount);?? ????????}?? ????????ALOGV(Camera?%d:?New?capture?state?%s,?? ????????????????client-getCameraId(),?kStateNames[mCaptureState]);

文档评论(0)

基本资料 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档