本讲是android camera专题系列的第27讲,我们介绍android camera2 api专题的cameracapturesession.capturecallback详解。
更多资源:
资源 | 描述 |
---|---|
在线课程 | |
知识星球 | 星球名称:深入浅出android camera 星球id: 17296815 |
极客笔记圈 |
cameracapturesession.capturecallback详解
用于监控camera hal处理某个capturerequest的处理状态
api | description |
---|---|
oncapturestarted(session, request, long timestamp, long framenumber) | 当camera hal开始处理这个capturerequest时调用,对应这一张图像开始曝光时。或者开始reprocess这个capturerequest时调用。 |
oncaptureprogressed(session, request, captureresult partialresult) | camera hal pipeline中,部分模块完成这个capturerequest的处理,有partial result上报时调用。 |
oncapturecompleted(session, request, totalcaptureresult result) | 这个capturerequest处理完成后调用,会打包所有的partial result一起上报给app。 |
oncapturebufferlost(session, request, surface target, long framenumber) | 指定surface不会收到这个capturerequest处理后的buffer了,通常原因是底层处理这路stream发生错误或因flush而主动丢帧。 |
oncapturefailed(session, request, capturefailure failure) | 整个capturerequest处理失败时调用,不会有totalcaptureresult了,oncapturecompleted不会被调用。如果capturefailure#wasimagecaptured为true则表示某些路surfaces可能会收到image buffer。 |
oncapturesequenceaborted(session, int sequenceid) | 整个序列的capturerequest放弃继续处理时调用,通常是由于stoprepeating 或 abortcaptures调用了 |
oncapturesequencecompleted(session, int sequenceid, long framenumber) | 整个序列的capturerequest处理完后调用,sequence id等于调用送capturerequest方法(ex. capture)的返回值 |
oncapturestarted
app如何使用
- 针对拍照的capturerequest,比较适合在这个callback中播放拍照声音,提示用户开始拍照了
参数
- request:正在处理的capturerequest实例
-
timestamp
- regular capturerequest:这一帧图像开始曝光时的时间戳
-
reprocess capturerequest:输入图像开始曝光时的时间戳
-
通常用于同步captureresult和image
framenumber
- 这一帧的编号,与captureresult#getframenumber获取到的值一样
oncaptureprogressed
调用次数和时机
- 处理一个capturerequest,可能会有多次oncaptureprogressed回调。最多回调cameracharacteristics#request_partial_result_count次
不同capturerequest可以有不同的回调次数
可能发生在oncapturestarted之前或之后
每次回调的partial result内容都不重复
app如何使用
- 在性能要求高的场景中,app可以在partial result里面去查询关心的metadata值,避免在totalcaptureresult上来时才去查询
- 比如需要插入到数据库的信息或后处理image buffer时需要的信息