1 CameraCaptureSession 是一个事务,用来向相机设备发送获取图像的请求,同时reprocess 图像(是不是hal已经处理了一次图像,然后在上层进行处理 or 命令hal进行其他处理操作)。
2 CameraCaptureSession 创建需要几百毫秒, hal 此时会进行 A pipeline 的创建 B 申请 buffer(这两项都是hal进行的)
3 当新的 CameraCaptureSession 被创建,那么旧的 CameraCaptureSession,会关掉,它的onclose 方法会关掉。
4
CameraCaptureSession 有几种状 态,
onConfigured 当前的 CameraCaptureSession 已被创建成功,而且 Session 已经传递上去。
这个时候,我们可以通过 CameraCaptureSession 向底层发送 CaptureRequset,如果 CaptureRequset 正在等待被处理,那么 onActive 将会被调用,否则的话,onReady会被调用
onConfiguredFailed : CameraCaptureSession 创建失败,可能是 Surface size 不支持,或者 Surface 数量不支持。 这时候要重新审视 CameraCaptureSession 的参数。
那我们也可以知道。CameraCaptureSession 也会对 Surface size 跟 Surface 的数量进行设置。
onSurfacePrepared : 某一个 Surface 预分配的 BUffer 完成后,会调用
onReady 当 session没有 requset 处理时 调用
onActive 当 session开始 requset 处理时 调用
onClosed 表示 该 session 已经关闭了。
onCaptureQueueEmpty
5 个人感觉 不管是 拍照还是录像,都一般经过这几步 (onActive-》 onSurfacePrepared 前后关系 (前后关系也不是一定的))
onConfigured -》onReady -》 onActive-》 onSurfacePrepared
6 当 拍照 跟 录像之间进行切换的时候,CameraCaptureSession 会关闭,然后重新,生成,我感觉是 session 的type 不一样。
7 状态 onActive 会切换到 onReady 或者 onCaptureQueueEmpty(一般拍照,会这么显示,表示已经拍完照,它更像是一种通知)。
8 什么是慢动作录像(SlowMotionRecord)?
通常我们人眼能够接受的最好的视频帧速率是24帧/每秒左右。那如果我们用120帧/秒拍摄一个动作,再用24帧每秒来播放的话,视频就放慢了5倍,这个就是慢动作录像了。
慢动作录像,又叫高帧率录像(HFR),也就是以高fps(运行速率)捕获、编码并保存为30 fps(目标速率),这种情况运行速率大于目标速率。
(还有一种模式叫做高速录制(HSR) : 即以高fps(运行速率)捕获、编码并保存为高 fps(目标速率),运行速率等于目标速率。)
9 CameraCaptureSession 的api,实现。
拍照:
capture, 向 camera 底层发送一个 CaptureRequest,优先级比 Repeating CaptureRequest 要高
连拍:
captureBurst 向camera 底层发送一组 CaptureRequest,优先级比 Repeating CaptureRequest 要高。这一组CaptureRequest,不能被其他的 CaptureRequest,插入进来。
这正是 连续调用 Capture 方法的区别。
录像:setRepeatingRequest 向camera 底层发送一个 CaptureRequest,底层会不停的发送这个 CaptureRequest。
slowmotion : setRepeatingRequestBurst : 向camera 底层发送一组 CaptureRequest,底层会不停的发送这个 CaptureRequest。
终止请求:
abortCaptures
以最快的速度结束当前的 Request ,in-flight captures (属于hal)可能成功也可能失败,input capture Request Queue (属于framework)清空。
stopRepeating
input capture Request Queue (属于framework)清空
isReprocessable 判断当前的 session 能否处理 Reprocessable Capture Request
getDevice 获取当前 Session 绑定的 Camera Device(logic camera)