Camera2-CaptureRequest
- 这个系列的文章会翻译跟Camera2相关的api(用我的散装英语+自己的理解)
- 目前处于一边学习一边翻译的状态,所以可能会有错误
- 我也还没做校对,有需要的凑合着看,我会一边写一边回顾,有错就改
- 也请路过的大神斧正,感谢~~~
作用:
从相机捕获单个图像,包含设置和输出
包含硬件(传感器,镜头,闪存),处理管道,控制算法和输出缓冲区的配置。另包含接收图像数据的Surface列表
创建好的CaptureRequest被用在CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler) 或者 CameraCaptureSession.setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)方法里,用来捕获图像
每个请求都可以为相机指定一个接收数据的Surface子集,但是这些Surface必须是在最后一次创建会话的配置里面的,即最后一次调用的CameraDevice.createCaptureSession(SessionConfiguration)的SessionConfiguration里的
可以创建图像重处理请求,允许将之前捕获的图像发回给相机进行进一步处理,调用CameraDevice.createReprocessCaptureRequest(TotalCaptureResult),生成的request将被用于
CameraDevice.createReprocessableCaptureSession(InputConfiguration, List, CameraCaptureSession.StateCallback, Handler)
获取:
通过CameraDevice.createCaptureRequest(int)创建CaptureRequest.Builder,再通过Builder创建CaptureRequest
嵌套类
//CaptureRequest的构造器
CaptureRequest.Builder
//CaptureResult.get(CaptureResult.Key) 或者 CaptureRequest.Builder.set(Key, Object) 用的
CaptureRequest.Key<T>
公开方法
//描述此Parcelable实例的封送表示中包含的特殊对象的种类。
//例如,如果对象将在writeToParcel(Parcel,int)的输出中包含文件描述符,则此方法的返回值必须包含CONTENTS_FILE_DESCRIPTOR位。
public int describeContents ()
//比较两个CaptureRequest是否一致
//比较条件:
//key/values集合相等 && 输出的Surface列表相等 && user tag相等 && isReprocess()返回的值相等
public boolean equals (Object other)
//获取一个CaptureRequest的字段值
//Querying the value for the same key more than once will return a value which is equal to the previous queried value.
//多次查询同一个Key,将返回一个等于上一次查询的值(不懂啥意思了。。。有待实际使用中验证)
public T get (Key<T> key)
//key值无效,将返回IllegalArgumentException
//获取所有可用的key
//返回的key列表不可修改,强行修改将抛出UnsupportedOperationException异常
public List<Key<?>> getKeys ()
//获取一个CaptureRequest的标记(如果有的话)
//这个tag不由相机使用,而是在CaptureCallback.onCaptureCompleted被调用时,用来识别返回回来的CaptureRequest
public Object getTag ()
//Flatten this object in to a Parcel.
//将此对象展平为包裹(没懂啥意思,是将图像数据输出吗?输出到哪里?有待进一步探究)
//@Params dest--要写入对象的Parcel
//@Params flags--有关如何编写对象的其他标志。可以是0或Parcelable.PARCELABLE_WRITE_RETURN_VALUE
public void writeToParcel (Parcel dest, int flags)