Android Camera之Deferred Surface

前言

       在前面有跳过关于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()。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值