前言

在前面有跳过关于Deferred surface的介绍,在这一节里单独拎出来介绍一下,在CameraDeviceClient::createStream()中,当发现上面传下来的这个OutputConfiguration有设置deferred,并且没有任何BufferProducer时,就会走进createDeferredSurfaceStreamLocked(),并直接返回,下面就简单地介绍一下子。

目的:

Deferred Suface即延迟创建Surface,目的是优化Camera的启动性能。因为以前在创建Session时,Surface必须要事先全部准备好才可以去创建Session,但是像预览surface一般来自SurfaceView,TextureView等UI控件,只有在UI layout完成后,预览surface才ready,这样子就会延长camera的启动时间;但是在创建stream的过程中Hal其实只需要知道这个surface的size、format、usage等一些信息就可以了,而不会去操作surface,所以创建Session和创建surface这两件事情其实可以并行化,而不用串行化,这样就可以进一步优化启动性能了。

限制

只有SurfaceView、SurfaceTexture这种类型的surface才可以使用deferred surface,因为其他方式创建的surface可以立即获取到。

流程

一、createStream和endConfigure

在前面的createCaptureSession()里有讲过,大体分为createStream()和configStreams()两部分,其实对于Deferred Surface来说,也是这两个过程,只不过两部分会存在差异,接下来就不详细叙述,只对比差异部分。

  • CameraDeviceClient::createStream()

       这里同样会先创建Camera3OutputStream(),但是Consumer为nullptr,因为在APP在调用创建Seesion的接口时,surface还没有ready,所以没有GraphicBufferProducer带下来,所以在ceateStream这一步创建的是一个暂时没有consumer的Camera3OutputStream。

  • CameraDeviceClient::endConfigure()

即使surface还未准备好,但是Hal只需要知道这路Stream的size、format、usage等这些资讯,照样可以开启底层的配置。所以对于Deferred surface是不会影响到底层的配置的,但是在Hal层配置完这路对应stream后,不会去finishConfiguration(),关于finishConfiguration的作用在前面也有讲过,不会去finishConfiguration()是因为前面创建的Camera3OutputStream里的consumer为nullptr。

二、finalizeOutputConfiguration()

但是目前还没有把Buffer的Producer设置给CameraService,那么当surface准备好了之后,还需要走一遍将finishConfiguration(),具体来说:

1、当surface已经准备好后,App需要OutputConfiguration::addSurface()将surface添加进这路Stream的OutputConfiguration中

2、调用finalizeOutputConfiguration(OutputConfiguration),对这路stream进行finalize,其大致的流程图如下所示            

可以看到,当这个流程里也是会拿到Java surface带下来的GraphicBufferProducer,创建Native surface;由于这路stream Hal层已经配置完,然后就直接走finishConfiguration()的流程了,这个方法做的事情见Android Camera之createCaptureSession()所解释。到这里,这路Stream也就算完全地配置完了。

p.s  要说明一点的是:App在向给底层送CaptureRequest处理时,如果Deferrd Surface还没有准备好,是不能带进CameraRequest里的,因为他还没有经过finishConfiguration()。

Android Camera之Deferred Surface相关推荐

  1. Android camera createCaptureSession分析

    在openCamera() 成功打开相机后,会通过CameraDevice.StateCallback回调接口onOpened()方法返回一个CameraDevice对象给应用层,而这个CameraD ...

  2. Android camera预览流程

    前面已经简单介绍了,在Android系统中open camera的流程,但是,它又是怎么预览.怎么配置流,如何最终操作到camera HAL的呢.接下来以android原生相机应用,android9, ...

  3. Android camera preview流程

    (原文链接:https://blog.csdn.net/weixin_41944449/article/details/102609776) APP 在 Camera2 相机应用,打开相机应用将会调用 ...

  4. Android Camera设置setPreviewCallback实现onPreviewFrame接口实时截取每一帧视频流数据

    1 概述 通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据 2 知识点 ① Android Camera ...

  5. 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )

    文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...

  6. android camera fragment,Android Camera 模块分析(三)

    第三部分 Camera的主要实现分析 3.1 JAVA程序部分 在packages/apps/Camera/src/com/android/camera/ 目录的Camera.java文件中,包含了对 ...

  7. android l camera no panorama,Android Camera从App层到framework层到HAL层的初始化过程

    Android camera 从上到下能够分为四个部分: Application层. framework层. HAL(hardware abstract layer)层. Kernel层 通常面向开发 ...

  8. Android camera(4)---Android Camera开发之基础知识篇

    Android Camera开发之基础知识篇 转自:https://blog.csdn.net/feiduclear_up/article/details/51968975#jump5 概述 Andr ...

  9. Android Camera 编程从入门到精通

    一.前言 想通过一篇文章就让我们精通 Android 的 Camera 那肯定是不可能的事情.但通过对 Android 中相机拍照的所有的方式的梳理和理解,包括直接调起相机拍照,Camera API ...

最新文章

  1. python xlwt写入数据超过范围限制_python的xlwt不能正确写入以及缓冲区问题
  2. Qt调用OpenCV汇总(1)
  3. 海底光缆——你不知道的秘密!
  4. 岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...
  5. 分布式文件系统之MogileFS的使用
  6. 新浪微博最新的、通吃网络应用和Air应用的SDK问世了
  7. zookeeper3.3.6 伪分布式安装
  8. 苏联W ndows视频,俄罗斯大神win10精简版32位
  9. 如何实现大批量UKEY远程连接管控?
  10. U-net复现pytorch版本 以及制作自己的数据集并训练
  11. 网站导航 - 网址大全
  12. 数字IC设计学习笔记(一)——逻辑综合简介
  13. 非专业python学多久_非的解释|非的意思|汉典“非”字的基本解释
  14. 直播设备之技术分享:全NDI 和NDI |HX
  15. js - 数学运算(取整,取余)
  16. 1、mos管的工作原理
  17. 2021靳吉朕的个人主页源码
  18. SQL Server 2000数据库程序设计
  19. B站百万收藏,超强学习法:我用过之后,强烈推荐给你们
  20. matlab频率和幅值图,请教!傅里叶变换频率和幅值对不上!

热门文章

  1. java短链接_Java 网址短链接服务原理及解决方案
  2. tp5.0 think-queue 消息队列
  3. 【蓝桥杯选拔赛真题01】Scratch消失的小猫 少儿编程scratch蓝桥杯选拔赛真题讲解
  4. python爬取pexels网站图片
  5. css审查元素一直有一块html,css父元素定位后子元素审查元素位置错乱
  6. 7代cpu能装虚拟xp系统吗_小米手机最新系统MIUI 11 推荐,附带小米刷机资源
  7. Qemu core 调试Cannot access memory at address 0x7fbc6c792858
  8. iOS转场动画之微信朋友圈图片查看器
  9. 怎么查看笔记本内存条型号_win10怎么查看自己电脑的内存条型号-win7之家·电脑系统下载站...
  10. Android Java 虚拟机